- Timestamp:
- 09/21/12 10:11:36 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sandbox/newExpressoMail/prototype/modules/newMail/js/newfoldertree.js
r7210 r7265 5 5 var cp_tree2; 6 6 function unorphanize(root, element) { 7 8 9 10 11 element.children = new Array(); 12 13 14 15 16 17 18 7 var ok = false; 8 var f = 0; 9 for (var i=0; i<root.length; i++) { 10 if (root[i].id == element.parentFolder) { 11 element.children = new Array(); 12 root[i].children.push(element); 13 return true; 14 } else if (ok = unorphanize(root[i].children, element)) { 15 break; 16 } 17 } 18 return ok; 19 19 } 20 20 21 21 function count_unseen_children(folder){ 22 23 24 25 26 27 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); 28 29 30 31 32 22 if(folder.children.length){ 23 for(var i=0; i< folder.children.length; i++){ 24 if(folder.children[i].children.length) 25 folder.children[i]['children_unseen'] = (folder.children[i]['children_unseen'] ? folder.children[i]['children_unseen'] : 0) + count_unseen_children(folder.children[i]); 26 27 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); 28 } 29 return folder['children_unseen']; 30 }else{ 31 return parseInt(folder.messageCount.unseen); 32 } 33 33 } 34 34 35 35 function valid_tabs(children_of_this_folder, folder_to_move){ 36 37 38 39 40 41 42 43 44 write_msg(get_lang("One or more messages from any sub-folder are open"));45 46 47 48 49 50 51 52 53 54 55 write_msg(get_lang("One or more messages from this folder are open"));56 57 58 36 var borders_open = $("#border_tr").children(); 37 38 var error = false; 39 for(var i = 1; i <= borders_open.length -2; i ++){ 40 //VERIFICA A CADA FILHO DA PASTA SE ESTA eventNSAGEM E DESTA PASTA 41 $.each(children_of_this_folder, function(index, value){ 42 if($(children_of_this_folder[index]).attr('id') == openTab.imapBox[$(borders_open[i]).find("input[type=hidden]").attr("name")]){ 43 error = true; 44 alert(("One or more messages from any sub-folder are open")); 45 return error; 46 47 } 48 }); 49 if(error){ 50 return error; 51 } 52 //VERIFICA SE EXISTE NA PASTA A SER MOVIDA 53 if(openTab.imapBox[$(borders_open[i]).find("input[type=hidden]").attr("name")] == folder_to_move){ 54 error = true; 55 alert(("One or more messages from this folder are open")); 56 return error; 57 } 58 } 59 59 } 60 60 61 61 function draw_new_tree_folder(callback){ 62 63 var folders = DataLayer.get("folder", true); 64 65 if(!selected){ 66 selected = "INBOX"; 67 } 68 /* 69 if( folders ) 70 { 71 folders = $.map( folders, function( folder ){ 72 return { 73 id: folder.folder_id, 74 commonName: folder.folder_name, 75 parentFolder: folder.folder_parent === "root" ? "" : folder.folder_parent, 76 messageCount: { total : '', unseen : '0' } 77 }; 78 }); 79 } 80 else 81 folders = DataLayer.get("folder", true); 82 */ 83 var tree1 = new Array(); 84 var tree2 = new Array(); 85 var tree3 = new Array(); 86 for (var i=0; i<folders.length; i++) { 87 if (/^INBOX/.test(folders[i].id)) { 88 if (!unorphanize(tree1, folders[i])) { 89 folders[i].children = new Array(); 90 tree1.push(folders[i]); 91 } 92 } 93 else if (/^user/.test(folders[i].id)) { 94 if (!unorphanize(tree2, folders[i])) { 95 folders[i].children = new Array(); 96 tree2.push(folders[i]); 97 } 98 } 99 else if (/^local_messages/.test(folders[i].id)) { 100 if (!unorphanize(tree3, folders[i])) { 101 folders[i].children = new Array(); 102 tree3.push(folders[i]); 103 } 104 } 105 } 106 107 for(var i =0; i<tree1.length; i++){ 108 count_unseen_children(tree1[i]); 109 } 110 for(var i =0; i<tree2.length; i++){ 111 count_unseen_children(tree2[i]); 112 } 113 for(var i =0; i<tree3.length; i++){ 114 count_unseen_children(tree3[i]); 115 } 116 cp_tree1 = tree1; 117 cp_tree2 = tree2; 118 var shared_acls = {}; 119 120 $.each(cp_tree2, function(index, value){ 121 shared_acls[value.id] = value.acl_share; 122 }); 123 124 var html = DataLayer.render('templates/detailedfoldertree.ejs', {folders: [tree1, tree2, tree3]}); 125 var folders_html = $(".imap-folders").html(html).find(".mainfoldertree").treeview({ 126 persist: "cookie", 127 animated: "fast" 128 }).find(".folder").unbind("click").click(function(event){ 129 130 // MUDANÃA DE PASTAS! 131 var target = $(this); 132 133 if($(".folders-loading").length) 134 return; 135 136 if($(event.target).parent().is(".float-menu")) 137 return; 138 139 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') ) 140 return; 141 142 if( target.parent().find(".new_folder").length) 143 return; 144 145 if( !target.attr('id') ) 146 target = target.parent(); 147 if (target[0] == $(".mainfoldertree")[0]) return; 148 var uiId = target.attr('id'); 149 var child = target.find('.folder'); 150 151 if(!target.is('.mainfoldertree > .expandable-hitarea, .mainfoldertree > .collapsable-hitarea')){ 152 $('.filetree span.folder.selected').removeClass('selected'); 153 $(target).children('.folder').addClass('selected'); 154 } 155 $(this).addClass("folders-loading"); 156 selected = target.attr('id'); 157 158 changeFolder(target.attr('id'), child.attr('title')); 159 160 /*$.ajax({ 161 url : "controller.php?"+ $.param( { action: "$this.imap_functions.get_folders_list", folder: target.attr('id') } ), 162 success : function(data){ 163 data = connector.unserialize(data); 164 165 if(data) 166 build_quota(data); 167 } 168 });*/ 169 $(".folders-loading").removeClass("folders-loading"); 170 171 }).filter('.followup-messages').click(function(event, ui){ 172 search_emails("UNDELETED KEYWORD \"$Followupflagged\""); 173 }).end().end(); 174 175 folders_html.find('[id="'+selected+'"]').children().addClass("selected"); 176 $(".folder").not(".head_folder").not(".shared-folders").parent().find(".folder").not(".head_folder,.inbox,.drafts,.sent,.spam,.trash").draggable({ 177 // DRAG DE PASTAS 178 start : function(){ 179 $(this).css("color", "gray"); 180 }, 181 stop : function(){ 182 $(this).css("color", ""); 183 }, 184 revert: "invalid", 185 helper: function(event){ 186 if($.trim(($(this).text().split("["))[0]).length > 18) 187 return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]).substring(0,18) + "...", type: "folder"})); 188 return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]), type: "folder"})); 189 }, 190 delay: 150, 191 refreshPositions: true, 192 zIndex : 2700, 193 //scroll: true, 194 //scrollSensitivity: 100, 195 //scrollSpeed: 100, 196 containment: "#divAppbox" 197 }).end().droppable({ 198 //DROP DE PASTAS 199 over : function(a, b){ 200 //INICIO : SE A PASTA CONTER FILHAS EXPANDE 201 over = $(this); 202 $(this).addClass("folder-over"); 203 if(($(this)[0] != $(this).parent().find(".head_folder")[0])) 204 if($(this).prev()[0]) 205 if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0]){ 206 setTimeout(function(){ 207 if(over.hasClass("folder-over")) 208 over.prev().trigger("click"); 209 }, 500); 210 211 } 212 //FIM : SE A PASTA CONTER FILHAS EXPANDE 213 214 //SETA BORDA EM VOLTA DA PASTA 215 }, 216 out : function(){ 217 //RETIRA BORDA EM VOLTA DA PASTA 218 $(this).removeClass("folder-over"); 219 }, 220 drop : function(event, ui){ 221 $(this).removeClass("folder-over"); 222 if($(this).parent().attr('id') == undefined){ 223 var folder_to = 'INBOX'; 224 var to_folder_title = get_lang("Inbox"); 225 }else{ 226 var folder_to = $(this).parent().attr('id'); 227 var to_folder_title = $(this).attr('title'); 228 } 229 var folder_to_move = ui.draggable.parent().attr('id'); 230 var border_id = ui.draggable.find("input[type=hidden]").attr("name"); 231 // eventnsagens : SE O DROP VIER DA LISTA DE eventNSAGENS : 232 if(folder_to_move == "tbody_box"){ 233 move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title,true); 234 return refresh(); 235 } 236 //SE FOR DE UMA PESQUISA RAPIDA 237 else if(ui.draggable.parents('[id^="content_id_"]')[0]){ 238 move_search_msgs("content_id_"+border_id, folder_to, to_folder_title); 239 return refresh(); 240 } 241 // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA 242 else if(folder_to_move == "border_tr"){ 243 var id_msg = border_id.split("_")[0]; 244 folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder()); 245 alternate_border(border_id); 246 move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true); 247 return refresh(); 248 } 249 // SE O DROP VIER DA LISTA DE PASTAS 250 else{ 251 var folder_to_exist = folder_to_move.split(imap_configs.imapDelimiter); 252 folder_to_exist = folder_to+imap_configs.imapDelimiter+folder_to_exist[folder_to_exist.length-1]; 253 254 //VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS 255 256 if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move)){ 257 return; 258 } 259 //FIM : VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS; 260 261 // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA PARA O eventSMO LOCAL 262 if(folder_to_exist == folder_to_move){ 263 return write_msg(get_lang("Thie folder is already in this place")); 264 } 265 266 // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA ABERTA NO momentO 267 if(folder_to_move == get_current_folder()){ 268 return write_msg(get_lang("It's not possible move this folder, because it is being used in the moment!")); 269 } 270 271 // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA FILHA DA PASTA ABERTA NO momentO 272 if(ui.draggable.parent().find(".selected")[0]){ 273 return write_msg(get_lang("It's not possible move this folder, because its subfolder is being used in the moment!")); 274 } 275 276 // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA PAI PARA DENTRO DE UMA FILHA 277 if(ui.draggable.parent().find('[id="'+folder_to+'"]')[0]){ 278 return write_msg(get_lang("It's not possible to move this folder to its subfolders!")); 279 } 280 281 if($('[id="'+folder_to_exist+'"]').length){ 282 return write_msg(get_lang("Can not move this folder to this location, because the target has already a folder with this name")); 283 } 284 285 $(this).addClass("folders-loading"); 286 287 $.ajax({ 288 url : "controller.php?"+ $.param( { action: "$this.imap_functions.move_folder", folder_to_move: folder_to_move, folder_to: folder_to } ), 289 success : function(data){ 290 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 291 data = connector.unserialize(data); 292 if(data == "Permission denied"){ 293 write_msg(get_lang("Permission denied")); 294 }else if(data){ 295 write_msg(get_lang("The folder was successfully moved")); 296 } 297 else{ 298 write_msg(get_lang("ERROR moving your folder.")); 299 } 300 } 301 }); 302 } 303 } 304 }); 305 $(".folder").not(".shared-folders").parent().find(".folder").hover( 306 function(){ 307 //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU à ADICIONADO! 308 if(!$(this).children(":last").hasClass("float-menu") && !$(this).children(":last").hasClass("new_folder")){ 309 var folder_ = $(this); 310 var folder_name; 311 var shared = { 312 head : false, 313 valid : false 314 }; 315 if(folder_.parent().attr('id')){ 316 folder_name = folder_.parent().attr('id').split(imap_configs.imapDelimiter); 317 folder_name = folder_name[folder_name.length -1]; 318 shared.valid = folder_.parent().attr('id').search("user/") == 0 ? true : false; 319 }else 320 folder_name = "Root"; 321 322 if(shared.valid){ 323 shared.head = folder_.parent().attr('id').split(imap_configs.imapDelimiter).length == 2 ? true : false; 324 var folder_name_parts = folder_.parent().attr('id').split(imap_configs.imapDelimiter); 325 var acls = shared_acls[folder_name_parts[0]+imap_configs.imapDelimiter+folder_name_parts[1]]; 326 327 } 328 329 html = DataLayer.render("/templates/float_folder_menu.ejs", {name_folder : folder_name, flag : shared, acl : acls}); 330 //FUNÃÃO DO eventNU FLUTUANTE EDITAR < BEGIN 331 var esc = false; 332 $(folder_).append(html).find(".float-menu-edit").click(function(){ 333 var folder_id = $(this).parents(".closed:first").attr('id'); 334 var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]); 335 if($(this).parents(".closed:first").find("span:first").hasClass("selected")) 336 return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!")); 337 if($(this).parents(".closed:first").find(".selected").length) 338 return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!")); 339 if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 340 return; 341 $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>"); 342 $(".new_folder").focus().keydown(function(event){ 343 event.stopPropagation(); 344 if(event.keyCode == 13){ 345 if($(this).val() != ""){ 346 if($(this).val().match(/[\/\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi)){ 347 return write_msg(get_lang("cannot create folder. try other folder name")); 348 } 349 var new_name = folder_id.replace(/[a-zA-Z0-9á-úÃ-Ã^\s_-]+$/, $(this).val()); 350 if($('[id="'+new_name+'"]').length){ 351 $(".folders-loading").removeClass("folders-loading"); 352 write_msg(get_lang("Mailbox already exists")); 353 return draw_new_tree_folder(); 354 } 355 $(".new_folder").parent().addClass("folders-loading"); 356 $.ajax({ 357 url : "controller.php?action=$this.imap_functions.ren_mailbox", 358 type : "POST", 359 data : "current="+folder_id+"&rename="+new_name, 360 success : function(data){ 361 data = connector.unserialize(data); 362 if(data == "Permission denied"){ 363 $(".folders-loading").removeClass("folders-loading"); 364 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 365 return write_msg(get_lang("Permission denied")); 366 } 367 write_msg(get_lang("The folder was successfully rename")); 368 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 369 } 370 }); 371 } 372 }else if( event.keyCode == 27){ 373 draw_new_tree_folder(); 374 } 375 }).focusout(function(){ 376 draw_new_tree_folder(); 377 }).val(name); 378 }) 379 //FUNÃÃO DO eventNU FLUTUANTE EDITAR < END 380 //FUNÃÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN 381 .end().find(".float-menu-remove").click(function(){ 382 383 var folder_id = $(this).parents(".closed:first").attr('id'); 384 var folder_name = "<strong>"+$.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0])+"</strong>"; 385 386 if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 387 return; 388 $(this).parents(".closed:first").find(".folder").addClass("folders-loading"); 389 390 if($(this).parents(".closed:first").find("ul").length){ 391 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 392 return write_msg(get_lang("Delete/move subfolders first")); 393 } 394 if($(this).parents(".closed:first").find(".selected").length){ 395 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 396 return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!")); 397 } 398 var folder_span = $(this); 399 var confirm_text = get_lang("Do you wish to exclude the folder "); 400 $.Zebra_Dialog(confirm_text+folder_name, { 401 'type': 'question', 402 'overlay_opacity': '0.5', 403 'buttons': [get_lang('Yes'), get_lang('No')], 404 'onClose': function(caption) { 405 if(caption == get_lang('Yes')){ 406 $.ajax({ 407 url : "controller.php?action=$this.imap_functions.delete_mailbox", 408 type: "POST", 409 data : "del_past="+folder_id, 410 success : function(data){ 411 data = connector.unserialize(data); 412 if(data == "Mailbox does not exist"){ 413 $(".folders-loading").removeClass("folders-loading"); 414 return write_msg(get_lang("Mailbox does not exist")); 415 }else if(data == "Permission denied"){ 416 $(".folders-loading").removeClass("folders-loading"); 417 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 418 return write_msg(get_lang("Permission denied")); 419 } 420 write_msg(get_lang("The folder %1 was successfully removed", folder_name)); 421 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 422 } 423 }); 424 }else{ 425 folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading"); 426 return; 427 } 428 } 429 }); 430 /* if(!confirm(confirm_text + folder_name)){ 431 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 432 return; 433 } */ 434 }) 435 //FUNÃÃO DO eventNU FLUTUANTE EXCLUIR < END 436 //FUNÃÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN 437 .end().find(".float-menu-new").click(function(){ 438 $(this).parents(".float-menu").hide(); 439 var selected_li = $(this).parents(".closed:first"); 440 if(selected_li.find("ul:first").length){ 441 var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first")); 442 if(selected_li.find(".expandable-hitarea").length){ 443 selected_li.find(".expandable-hitarea").trigger('click'); 444 } 445 selected_li.find("ul:first").treeview({ 446 add: new_folder 447 }); 448 }else if(selected_li.length){ 449 var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 450 selected_li.treeview({ 451 add: new_folder 452 }); 453 }else{ 454 selected_li = $(this).parents(".head_folder").parent(); 455 if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length){ 456 $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click'); 457 } 458 var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 459 selected_li.treeview({ 460 add: new_folder 461 }); 462 } 463 464 selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event){ 465 event.stopPropagation(); 466 if(event.keyCode == 13){ 467 if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi)){ 468 return write_msg(get_lang("cannot create folder. try other folder name")); 469 } 470 if($('[id="'+ (selected_li.attr('id')? selected_li.attr('id') : "INBOX") + imap_configs.imapDelimiter + $(this).val()+'"]').length){ 471 $(".folders-loading").removeClass("folders-loading"); 472 write_msg(get_lang("Mailbox already exists")); 473 return draw_new_tree_folder(); 474 } 475 $(".new_folder").parent().addClass("folders-loading"); 476 create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id')? selected_li.attr('id') : "INBOX")); 477 }else if( event.keyCode == 27){ 478 draw_new_tree_folder(); 479 } 480 }).focusout(function(){ 481 draw_new_tree_folder(); 482 }); 483 }).end().find(".float-menu-export").click(function(){ 484 //proxy_mensagens.export_all_messages($(this).parents("li:first").attr("id")) 485 486 var name_box = $(this).parents("li:first").attr("id"); 487 var name_folder = name_box.split(imap_configs.imapDelimiter)[name_box.split(imap_configs.imapDelimiter).length-1]; 488 489 var hand_export = function(data){ 490 if(!data){ 491 write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.')) 492 }else if(data["empty_folder"]){ 493 write_msg(get_lang("The selected folder is empty.")); 494 }else 495 download_attachments(null, null, data, null,null, name_folder +'.zip'); 496 } 497 cExecute("$this.exporteml.export_all",hand_export,"folder="+name_box); 498 write_msg(get_lang('You must wait while the messages will be exported...')); 499 }); 500 //FUNÃÃO DO eventNU FLUTUANTE NOVA PASTA < END 501 } 502 if(!$(".new_folder").length){ 503 $(this).find(".float-menu:first").css("display", ""); 504 } 505 }, 506 function(){ 507 $(this).find(".float-menu:first").hide(); 508 } 509 ); 62 63 /* 64 * Verificar atualização do conceito folder após commit 65 * */ 66 DataLayer.remove("folder", false); 67 68 var folders = DataLayer.get("folder");//, true); 69 70 if(!selected){ 71 selected = "INBOX"; 72 } 73 74 var tree1 = new Array(); 75 var tree2 = new Array(); 76 var tree3 = new Array(); 77 for (var i=0; i<folders.length; i++) { 78 if (/^INBOX/.test(folders[i].id)) { 79 if (!unorphanize(tree1, folders[i])) { 80 folders[i].children = new Array(); 81 tree1.push(folders[i]); 82 } 83 } 84 else if (/^user/.test(folders[i].id)) { 85 if (!unorphanize(tree2, folders[i])) { 86 folders[i].children = new Array(); 87 tree2.push(folders[i]); 88 } 89 } 90 else if (/^local_messages/.test(folders[i].id)) { 91 if (!unorphanize(tree3, folders[i])) { 92 folders[i].children = new Array(); 93 tree3.push(folders[i]); 94 } 95 } 96 } 97 98 for(var i =0; i<tree1.length; i++){ 99 count_unseen_children(tree1[i]); 100 } 101 for(var i =0; i<tree2.length; i++){ 102 count_unseen_children(tree2[i]); 103 } 104 for(var i =0; i<tree3.length; i++){ 105 count_unseen_children(tree3[i]); 106 } 107 cp_tree1 = tree1; 108 cp_tree2 = tree2; 109 var shared_acls = {}; 110 111 $.each(cp_tree2, function(index, value){ 112 shared_acls[value.id] = value.acl_share; 113 }); 114 115 var html = DataLayer.render('templates/detailedfoldertree.ejs', {folders: [tree1, tree2, tree3]}); 116 var folders_html = $(".imap-folders").html(html).find(".mainfoldertree").treeview({ 117 persist: "cookie", 118 animated: "fast" 119 }).find(".folder").unbind("click").click(function(event){ 120 121 // MUDANÃA DE PASTAS! 122 var target = $(this); 123 124 if($(".folders-loading").length) 125 return; 126 127 if($(event.target).parent().is(".float-menu")) 128 return; 129 130 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') ) 131 return; 132 133 if( target.parent().find(".new_folder").length) 134 return; 135 136 if( !target.attr('id') ) 137 target = target.parent(); 138 if (target[0] == $(".mainfoldertree")[0]) return; 139 var uiId = target.attr('id'); 140 var child = target.find('.folder'); 141 142 if(!target.is('.mainfoldertree > .expandable-hitarea, .mainfoldertree > .collapsable-hitarea')){ 143 $('.filetree span.folder.selected').removeClass('selected'); 144 $(target).children('.folder').addClass('selected'); 145 } 146 $(this).addClass("folders-loading"); 147 selected = target.attr('id'); 148 149 Folder.change(target.attr('id'), child.attr('title')); 150 151 /*$.ajax({ 152 url : "controller.php?"+ $.param( { action: "$this.imap_functions.get_folders_list", folder: target.attr('id') } ), 153 success : function(data){ 154 data = connector.unserialize(data); 155 156 if(data) 157 build_quota(data); 158 } 159 });*/ 160 $(".folders-loading").removeClass("folders-loading"); 161 162 }).filter('.followup-messages').click(function(event, ui){ 163 search_emails("UNDELETED KEYWORD \"$Followupflagged\""); 164 }).end().end(); 165 166 folders_html.find('[id="'+selected+'"]').children().addClass("selected"); 167 $(".folder").not(".head_folder").not(".shared-folders").parent().find(".folder").not(".head_folder,.inbox,.drafts,.sent,.spam,.trash").draggable({ 168 // DRAG DE PASTAS 169 start : function(){ 170 $(this).css("color", "gray"); 171 }, 172 stop : function(){ 173 $(this).css("color", ""); 174 }, 175 revert: "invalid", 176 helper: function(event){ 177 if($.trim(($(this).text().split("["))[0]).length > 18) 178 return $(DataLayer.render('templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]).substring(0,18) + "...", type: "folder"})); 179 return $(DataLayer.render('templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]), type: "folder"})); 180 }, 181 delay: 150, 182 refreshPositions: true, 183 zIndex : 2700, 184 //scroll: true, 185 //scrollSensitivity: 100, 186 //scrollSpeed: 100, 187 containment: "#divAppbox" 188 }).end().droppable({ 189 //DROP DE PASTAS 190 over : function(a, b){ 191 //INICIO : SE A PASTA CONTER FILHAS EXPANDE 192 over = $(this); 193 $(this).addClass("folder-over"); 194 if(($(this)[0] != $(this).parent().find(".head_folder")[0])) 195 if($(this).prev()[0]) 196 if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0]){ 197 setTimeout(function(){ 198 if(over.hasClass("folder-over")) 199 over.prev().trigger("click"); 200 }, 500); 201 202 } 203 //FIM : SE A PASTA CONTER FILHAS EXPANDE 204 205 //SETA BORDA EM VOLTA DA PASTA 206 }, 207 out : function(){ 208 //RETIRA BORDA EM VOLTA DA PASTA 209 $(this).removeClass("folder-over"); 210 }, 211 drop : function(event, ui){ 212 $(this).removeClass("folder-over"); 213 if($(this).parent().attr('id') == undefined){ 214 var folder_to = 'INBOX'; 215 var to_folder_title = ("Inbox"); 216 }else{ 217 var folder_to = $(this).parent().attr('id'); 218 var to_folder_title = $(this).attr('title'); 219 } 220 var folder_to_move = ui.draggable.parent().attr('id'); 221 var border_id = ui.draggable.find("input[type=hidden]").attr("name"); 222 // eventnsagens : SE O DROP VIER DA LISTA DE eventNSAGENS : 223 if(folder_to_move == "tbody_box"){ 224 move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title,true); 225 return refresh(); 226 } 227 //SE FOR DE UMA PESQUISA RAPIDA 228 else if(ui.draggable.parents('[id^="content_id_"]')[0]){ 229 move_search_msgs("content_id_"+border_id, folder_to, to_folder_title); 230 return refresh(); 231 } 232 // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA 233 else if(folder_to_move == "border_tr"){ 234 var id_msg = border_id.split("_")[0]; 235 folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder()); 236 alternate_border(border_id); 237 move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true); 238 return refresh(); 239 } 240 // SE O DROP VIER DA LISTA DE PASTAS 241 else{ 242 var folder_to_exist = folder_to_move.split(imap_configs.imapDelimiter); 243 folder_to_exist = folder_to+imap_configs.imapDelimiter+folder_to_exist[folder_to_exist.length-1]; 244 245 //VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS 246 247 if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move)){ 248 return; 249 } 250 //FIM : VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS; 251 252 // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA PARA O eventSMO LOCAL 253 if(folder_to_exist == folder_to_move){ 254 return alert("Thie folder is already in this place"); 255 } 256 257 // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA ABERTA NO momentO 258 if(folder_to_move == Folder.open){ 259 return alert("It's not possible move this folder, because it is being used in the moment!"); 260 } 261 262 // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA FILHA DA PASTA ABERTA NO momentO 263 if(ui.draggable.parent().find(".selected")[0]){ 264 return alert(("It's not possible move this folder, because its subfolder is being used in the moment!")); 265 } 266 267 // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA PAI PARA DENTRO DE UMA FILHA 268 if(ui.draggable.parent().find('[id="'+folder_to+'"]')[0]){ 269 return alert(("It's not possible to move this folder to its subfolders!")); 270 } 271 272 if($('[id="'+folder_to_exist+'"]').length){ 273 return alert(("Can not move this folder to this location, because the target has already a folder with this name")); 274 } 275 276 $(this).addClass("folders-loading"); 277 278 $.ajax({ 279 url : "../expressoMail1_2/controller.php?"+ $.param( { action: "$this.imap_functions.move_folder", folder_to_move: folder_to_move, folder_to: folder_to } ), 280 success : function(data){ 281 draw_new_tree_folder(); 282 data = connector.unserialize(data); 283 if(data == "Permission denied"){ 284 alert(("Permission denied")); 285 }else if(data){ 286 alert(("The folder was successfully moved")); 287 } 288 else{ 289 alert(("ERROR moving your folder.")); 290 } 291 } 292 }); 293 } 294 } 295 }); 296 $(".folder").not(".shared-folders").parent().find(".folder").hover( 297 function(){ 298 //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU à ADICIONADO! 299 if(!$(this).children(":last").hasClass("float-menu") && !$(this).children(":last").hasClass("new_folder")){ 300 var folder_ = $(this); 301 var folder_name; 302 var shared = { 303 head : false, 304 valid : false 305 }; 306 if(folder_.parent().attr('id')){ 307 folder_name = folder_.parent().attr('id').split(imap_configs.imapDelimiter); 308 folder_name = folder_name[folder_name.length -1]; 309 shared.valid = folder_.parent().attr('id').search("user/") == 0 ? true : false; 310 }else 311 folder_name = "Root"; 312 313 if(shared.valid){ 314 shared.head = folder_.parent().attr('id').split(imap_configs.imapDelimiter).length == 2 ? true : false; 315 var folder_name_parts = folder_.parent().attr('id').split(imap_configs.imapDelimiter); 316 var acls = shared_acls[folder_name_parts[0]+imap_configs.imapDelimiter+folder_name_parts[1]]; 317 318 } 319 320 html = DataLayer.render("/templates/float_folder_menu.ejs", {name_folder : folder_name, flag : shared, acl : acls}); 321 //FUNÃÃO DO eventNU FLUTUANTE EDITAR < BEGIN 322 var esc = false; 323 $(folder_).append(html).find(".float-menu-edit").click(function(){ 324 var folder_id = $(this).parents(".closed:first").attr('id'); 325 var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]); 326 if($(this).parents(".closed:first").find("span:first").hasClass("selected")) 327 return alert(("It's not possible rename this folder, because it is being used in the moment!")); 328 if($(this).parents(".closed:first").find(".selected").length) 329 return alert(("It's not possible rename this folder, because its subfolder is being used in the moment!")); 330 if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 331 return; 332 $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>"); 333 $(".new_folder").focus().keydown(function(event){ 334 event.stopPropagation(); 335 if(event.keyCode == 13){ 336 if($(this).val() != ""){ 337 if($(this).val().match(/[\/\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi)){ 338 return alert(("cannot create folder. try other folder name")); 339 } 340 var new_name = folder_id.replace(/[a-zA-Z0-9á-úÃ-Ã^\s_-]+$/, $(this).val()); 341 if($('[id="'+new_name+'"]').length){ 342 $(".folders-loading").removeClass("folders-loading"); 343 alert(("Mailbox already exists")); 344 return draw_new_tree_folder(); 345 } 346 $(".new_folder").parent().addClass("folders-loading"); 347 Folder.rename(folder_id,new_name, function(){ 348 draw_new_tree_folder(); 349 }); 350 } 351 }else if( event.keyCode == 27){ 352 draw_new_tree_folder(); 353 } 354 }).focusout(function(){ 355 draw_new_tree_folder(); 356 }).val(name); 357 }) 358 //FUNÃÃO DO eventNU FLUTUANTE EDITAR < END 359 //FUNÃÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN 360 .end().find(".float-menu-remove").click(function(){ 361 var folder_id = $(this).parents(".closed:first").attr('id'); 362 var folder_name = "<strong>"+$.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0])+"</strong>"; 363 364 if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 365 return; 366 $(this).parents(".closed:first").find(".folder").addClass("folders-loading"); 367 368 if($(this).parents(".closed:first").find("ul").length){ 369 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 370 return alert("Delete/move subfolders first"); 371 } 372 if($(this).parents(".closed:first").find(".selected").length){ 373 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 374 return alert("It's not possible delete this folder, because it is being used in the moment!"); 375 } 376 var folder_span = $(this); 377 confirm("Do you wish to exclude the folder "+folder_name,function(confirm){ 378 if(confirm){ 379 Folder.remove(folder_id, function(){ 380 draw_new_tree_folder(); 381 }); 382 }else{ 383 folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading"); 384 return; 385 } 386 }); 387 388 /* if(!confirm(confirm_text + folder_name)){ 389 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 390 return; 391 } */ 392 }) 393 //FUNÃÃO DO eventNU FLUTUANTE EXCLUIR < END 394 //FUNÃÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN 395 .end().find(".float-menu-new").click(function(){ 396 $(this).parents(".float-menu").hide(); 397 var selected_li = $(this).parents(".closed:first"); 398 if(selected_li.find("ul:first").length){ 399 var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first")); 400 if(selected_li.find(".expandable-hitarea").length){ 401 selected_li.find(".expandable-hitarea").trigger('click'); 402 } 403 selected_li.find("ul:first").treeview({ 404 add: new_folder 405 }); 406 }else if(selected_li.length){ 407 var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 408 selected_li.treeview({ 409 add: new_folder 410 }); 411 }else{ 412 selected_li = $(this).parents(".head_folder").parent(); 413 if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length){ 414 $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click'); 415 } 416 var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 417 selected_li.treeview({ 418 add: new_folder 419 }); 420 } 421 422 selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event){ 423 event.stopPropagation(); 424 if(event.keyCode == 13){ 425 if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi)){ 426 return alert(("cannot create folder. try other folder name")); 427 } 428 if($('[id="'+ (selected_li.attr('id')? selected_li.attr('id') : "INBOX") + imap_configs.imapDelimiter + $(this).val()+'"]').length){ 429 $(".folders-loading").removeClass("folders-loading"); 430 alert(("Mailbox already exists")); 431 return draw_new_tree_folder(); 432 } 433 $(".new_folder").parent().addClass("folders-loading"); 434 Folder.create($(this).val(), selected_li.attr('id'), function(){ 435 draw_new_tree_folder(); 436 }); 437 }else if( event.keyCode == 27){ 438 draw_new_tree_folder(); 439 } 440 }).focusout(function(){ 441 draw_new_tree_folder(); 442 }); 443 }).end().find(".float-menu-export").click(function(){ 444 //proxy_mensagens.export_all_messages($(this).parents("li:first").attr("id")) 445 446 var name_box = $(this).parents("li:first").attr("id"); 447 var name_folder = name_box.split(imap_configs.imapDelimiter)[name_box.split(imap_configs.imapDelimiter).length-1]; 448 449 var hand_export = function(data){ 450 if(!data){ 451 alert(('Error compressing messages (ZIP). Contact the administrator.')) 452 }else if(data["empty_folder"]){ 453 alert(("The selected folder is empty.")); 454 }else 455 download_attachments(null, null, data, null,null, name_folder +'.zip'); 456 } 457 cExecute("$this.exporteml.export_all",hand_export,"folder="+name_box); 458 alert(('You must wait while the messages will be exported...')); 459 }); 460 //FUNÃÃO DO eventNU FLUTUANTE NOVA PASTA < END 461 } 462 if(!$(".new_folder").length){ 463 $(this).find(".float-menu:first").css("display", ""); 464 } 465 }, 466 function(){ 467 $(this).find(".float-menu:first").hide(); 468 } 469 ); 510 470 } 511 471
Note: See TracChangeset
for help on using the changeset viewer.