Ignore:
Timestamp:
04/30/08 17:11:15 (16 years ago)
Author:
niltonneto
Message:

Fechamento de versão: 1.2211
Tickets:

#50 Criar uma funcionalidade para inserir imagens embutidas no corpo da mensagem.
#174 Implementar rascunho com anexos
#182 Criar funcionalidade de salvar automaticamente os emails em rascunhos
#183 Funcionalidade de drag and drop na busca
#185 Adicionar tabela na edição de email
#186 Correção do problema com nomes de anexos com caracteres especiais
#188 Definir aspectos de QA do ExpressoMail?
#190 Problema ao salvar informações de filtros no IE

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoMail1_2/js/main.js

    r245 r271  
    11// Tempo do auto refresh (em milisegundos) 
    22var time_refresh = 300000; 
     3var autosave_time = 60000; 
     4 
    35function init(){ 
    46        if (!is_ie) 
     
    3840        setTimeout('auto_refresh()', time_refresh); 
    3941} 
     42 
     43var away = false; 
     44var away_timer; 
     45function setAway () 
     46{ 
     47        away_timer = setTimeout("setAway()", 5000); 
     48        away=true; 
     49} 
     50 
     51function auto_save_msg(border_id) 
     52{ 
     53        if (document.getElementById('border_id_'+border_id)) 
     54        {        
     55                var      keypress_handler = function stop_counting () 
     56                { 
     57                        clearTimeout(away_timer); 
     58                        away=false; 
     59                        away_timer = setTimeout('setAway()',5000); 
     60                }; 
     61                 
     62                var obj = document.getElementById('body_'+border_id).contentWindow.document; 
     63                if ( obj.addEventListener ) 
     64                                obj.addEventListener('keypress', keypress_handler, false); 
     65                else if ( obj.attachEvent ) 
     66                        obj.attachEvent('onkeypress', keypress_handler); 
     67 
     68                if (away) 
     69                        { 
     70                                var save_link = Element("save_message_options"); 
     71                                if (save_link.onclick !=  '') 
     72                                        save_msg(border_id); 
     73                                else 
     74                                        setTimeout('auto_save_msg('+border_id+')',autosave_time); 
     75                        } 
     76                        else 
     77                                setTimeout('auto_save_msg('+border_id+')',3000); 
     78        } 
     79} 
     80 
     81function watch_changes_in_msg(border_id) 
     82{ 
     83        if (document.getElementById('border_id_'+border_id)) 
     84        {        
     85                function keypress_handler () 
     86                { 
     87                        away=false; 
     88                        var save_link = Element("save_message_options"); 
     89                        save_link.onclick = function onclick(event) { newMessageTab.toPreserve[border_id] = true; save_msg(border_id); } ; 
     90                        save_link.style.color = '#0000ff'; 
     91                }; 
     92                 
     93                var obj = document.getElementById('body_'+border_id).contentWindow.document; 
     94                if ( obj.addEventListener ) 
     95                                obj.addEventListener('keypress', keypress_handler, false); 
     96                else if ( obj.attachEvent ) 
     97                        obj.attachEvent('onkeypress', keypress_handler); 
     98                         
     99                var subject_obj = document.getElementById('subject_'+border_id); 
     100                if ( subject_obj.addEventListener ) 
     101                                subject_obj.addEventListener('keypress', keypress_handler, false); 
     102                else if ( subject_obj.attachEvent ) 
     103                        subject_obj.attachEvent('onkeypress', keypress_handler); 
     104                         
     105                var to_obj = document.getElementById('to_'+border_id); 
     106                if ( to_obj.addEventListener ) 
     107                                to_obj.addEventListener('keypress', keypress_handler, false); 
     108                else if ( to_obj.attachEvent ) 
     109                        to_obj.attachEvent('onkeypress', keypress_handler); 
     110                 
     111        } 
     112} 
     113 
     114 
    40115 
    41116function show_msg(msg_info){ 
     
    105180                        var box = Element("tbody_box"); 
    106181                        table_element.appendChild(box); 
    107                         var len = data.length; 
    108                         for (var i=0; i<len; i++){ 
     182                        for (var i=0; i<data.length; i++){ 
    109183                                var new_msg = this.make_tr_message(data[i], current_folder); 
    110184                                _dragArea.makeDragged(new_msg, data[i].msg_number, data[i].subject, true); 
    111185                                eval(data[i].command); 
    112186                        } 
     187                         
     188                        for (var i=0; i<data.msgs_to_delete.length; i++){ 
     189                                var remove_msg = document.getElementById(data.msgs_to_delete[i]); 
     190                                if (remove_msg) 
     191                                        remove_msg.parentNode.removeChild(remove_msg); 
     192                        } 
    113193                        if(parseInt(alert_new_msg) && data.new_msgs > 0) 
    114194                                alert(get_lang("You have %1 new", data['new_msgs'])+" "+(data['new_msgs'] > 1 ? get_lang("messages") : get_lang("message")) +"!"); 
    115195                        if(data.new_msgs > 0){ 
    116                         Element('tot_m').innerHTML = parseInt(Element('tot_m').innerHTML) + parseInt(data.new_msgs); 
     196                        Element('tot_m').innerHTML = parseInt(Element('tot_m').innerHTML) + parseInt(data.new_msgs); //refresh tab title 
    117197                        update_quota(); 
    118198                        } 
     
    368448 
    369449function new_message(type, border_ID){ 
    370         var new_border_ID = draw_new_message();  
     450 
     451        var new_border_ID = draw_new_message(parseInt(border_ID)); 
     452        if (preferences.auto_save_draft == 1) 
     453                setTimeout('auto_save_msg('+new_border_ID+')', autosave_time);           
     454         
    371455        // Salva a pasta da mensagem respondida ou encaminhada: 
    372456        var folder_message = Element("input_folder_"+border_ID); 
     
    596680                        break; 
    597681                case "edit": 
     682                        newMessageTab.imapBox[new_border_ID] = folder_message.value 
     683                        newMessageTab.imapUid[new_border_ID] = parseInt(border_ID.substr(0,border_ID.indexOf("_"))); 
     684                        document.getElementById('font_border_id_'+new_border_ID).innerHTML = data.subject; 
    598685                        data.to = Element("to_values_" + border_ID).value; 
    599686                        data.to = data.to.replace(/&lt;/gi,"<"); 
     
    610697                        Element("subject_" + new_border_ID).value = data.subject; 
    611698                         
     699                        var divFiles = Element("divFiles_"+new_border_ID); 
     700                        if (Element("attachments_" + border_ID)){ 
     701                                var attachments = document.getElementById("attachments_" + border_ID).childNodes; 
     702                                for (var i = (attachments.length > 1 ? 1 : 0); i < attachments.length; i++){ 
     703                                        var link_attachment = document.createElement("A"); 
     704                                        link_attachment.setAttribute("href", attachments[i].href); 
     705                                        link_attachment.innerHTML = attachments[i].innerHTML; 
     706                                        var tmp = link_attachment.href.replace("javascript:download_attachments(", "").replace(")", ""); 
     707                                        var a_tmp = tmp.split(','); 
     708                                        tmp = link_attachment.innerHTML.substring(0,link_attachment.innerHTML.lastIndexOf("(")); 
     709                                        a_tmp[2] = "'"+tmp.substring(0,tmp.length-1)+"'"; 
     710                                        s_tmp = escape(connector.serialize(a_tmp)); 
     711                                        divFiles.innerHTML += "<input style='border:0' type='CHECKBOX' name='forwarding_attachments[]' checked value=\""+s_tmp+"\"/>"; 
     712                                        divFiles.appendChild(link_attachment); 
     713                                } 
     714                        } 
    612715                        var body = Element("body_" + new_border_ID); 
    613716                        body.contentWindow.document.open(); 
     
    682785                        set_message_flag(msg_number_forwarded.value, 'forwarded'); 
    683786                } 
    684                  
    685787                delete_border(ID,'true'); 
    686788                if(wfolders.alert){ 
     
    699801                        write_msg(data); 
    700802        } 
     803        if ((! newMessageTab.toPreserve[ID]) && (newMessageTab.imapUid[ID] != 0)) 
     804                cExecute ("$this.imap_functions.delete_msgs&folder="+newMessageTab.imapBox[ID]+"&msgs_number="+newMessageTab.imapUid[ID],function(data){ return }); 
    701805} 
    702806 
    703807function send_message(ID, folder, folder_name){ 
     808        var save_link = Element("save_message_options"); 
     809        save_link.onclick = ''; 
     810        save_link.style.color = '#999'; 
     811         
    704812        ID_tmp = ID; 
    705          
     813 
    706814        var handler_send_message = function(data){ 
    707                 send_message_return(data, this.ID_tmp); 
    708         } 
    709  
     815                send_message_return(data, this.ID_tmp); // this is a hack to escape quotation form connector bug 
     816        }; 
     817                 
    710818        var textArea = document.createElement("TEXTAREA"); 
    711819        textArea.style.display='none'; 
     
    719827        input_folder.name = "folder"; 
    720828        input_folder.value = folder; 
     829        var msg_id = document.createElement("INPUT"); 
     830        msg_id.style.display='none'; 
     831        msg_id.name = "msg_id"; 
     832        msg_id.value = newMessageTab.imapUid[ID]; 
    721833         
    722834        if (is_ie){ 
     
    730842        form.appendChild(textArea); 
    731843        form.appendChild(input_folder); 
     844        form.appendChild(msg_id); 
    732845 
    733846        var _subject = trim(Element("subject_"+ID).value); 
     
    736849                return; 
    737850        } 
    738  
    739         cExecuteForm ("$this.imap_functions.send_mail", form, handler_send_message); 
    740 } 
    741  
    742 function save_msg(border_id, folder_id, folder_name){ 
    743         var handler_save_msg = function(data){ 
    744                 if(!verify_session(data)) 
    745                         return; 
    746                 if (data.append){ 
    747                         write_msg(get_lang('Your message was save as draft in folder %1.', data.folder_name)); 
    748                         delete_border(data.border_id,'true'); 
    749                 } 
    750                 else 
    751                         write_msg('ERRO saving your message.'); 
    752         } 
    753          
    754         var msg_data = new Array(); 
    755         if (document.getElementById("to_" + border_id)) 
    756                 msg_data.to = Element("to_" + border_id).value; 
    757          
    758         if (document.getElementById("cc_" + border_id)) 
    759                 msg_data.cc = Element("cc_" + border_id).value; 
    760          
    761         if (document.getElementById("cco_" + border_id))         
    762                 msg_data.cco = Element("cco_" + border_id).value;        
    763          
    764         if (document.getElementById("subject_" + border_id))     
    765                 msg_data.subject = Element("subject_" + border_id).value; 
    766          
    767         if (document.getElementById("body_" + border_id))                
    768                 msg_data.body = Element("body_" + border_id).contentWindow.document.body.innerHTML; 
    769                  
    770         var args   = "$this.imap_functions.save_msg";    
    771         var body = msg_data.body.replace(/&nbspl/g, "%nbsp;"); 
    772         body = url_encode(msg_data.body); 
    773         msg_data.subject = url_encode(msg_data.subject); 
    774         var params = "folder_id="+folder_id+"&folder_name="+folder_name+"&border_id="+border_id+"&to="+msg_data.to+"&cc="+msg_data.cc+"&cco="+msg_data.cco+"&subject="+msg_data.subject+"&body="+body; 
    775         cExecute( args, handler_save_msg, params); 
    776 } 
     851         
     852        cExecuteForm ("$this.imap_functions.send_mail", form, handler_send_message, ID); 
     853} 
     854 
     855function return_save(data,border_id,folder_name,folder_id,message_id) 
     856{ 
     857        var handler_delete_msg = function(data){ refresh(preferences.alert_new_msg); }; 
     858        RichTextEditor.saveFlag = 1; 
     859 
     860        if (! data) 
     861                write_msg('ERROR saving your message.'); 
     862        else 
     863        { 
     864                newMessageTab.imapUid[border_id] = data.msg_no; 
     865                newMessageTab.imapBox[border_id] = data.folder_id; 
     866                 
     867                var newTitle = document.getElementById('subject_'+border_id).value; 
     868                if (newTitle.length > 18) 
     869                        newTitle = newTitle.substr(18) + '...'; 
     870                else if (newTitle == '') 
     871                                newTitle = get_lang("No subject"); 
     872                document.getElementById('font_border_id_'+border_id).innerHTML = newTitle; 
     873                 
     874                // Replace the embedded images for new uids 
     875                var mainField = document.getElementById('body_'+border_id).contentWindow; 
     876                var content_body =  mainField.document.getElementsByTagName('body').item(0).innerHTML; 
     877                var body_images = content_body.match(/msg_num=\d*/g); 
     878                if (body_images) 
     879                { 
     880                        for (var i=0; i<body_images.length; i++){ 
     881                                content_body =  content_body.replace(body_images[i],"msg_num="+newMessageTab.imapUid[border_id]); 
     882                        } 
     883                        mainField.document.getElementsByTagName('body').item(0).innerHTML = content_body; 
     884                        // This is not just stupid, it refresh screen to avoid broken images 
     885                        mainField.document.getElementsByTagName('body').item(0).innerHTML = mainField.document.getElementsByTagName('body').item(0).innerHTML;   
     886                }        
     887                                 
     888                //Replace all files to new files 
     889                var divFiles = Element("divFiles_"+border_id); 
     890                var divParent = divFiles.parentNode; 
     891                divParent.removeChild(divFiles); 
     892                divFiles = document.createElement('DIV'); 
     893                divFiles.id = "divFiles_"+border_id; 
     894                divParent.appendChild(divFiles); 
     895                 
     896                var attach_files = connector.unserialize(data.files); 
     897                if (attach_files != null) { 
     898                        newMessageTab.countFile[border_id] = attach_files.length; 
     899                for (att_index = 0; att_index < attach_files.length; att_index++){ 
     900         
     901                        var link_attachment = document.createElement("A"); 
     902                        var fileName = attach_files[att_index].substr(0,attach_files[att_index].indexOf('_SIZE_')); 
     903                        var fileSize = parseInt(attach_files[att_index].substr(attach_files[att_index].indexOf('_SIZE_')+6))/1024 
     904                        link_attachment.innerHTML = fileName + " ("+parseInt(fileSize)+" kb)"; 
     905 
     906                        var href = "'"+folder_id+"','"+data.msg_no+"','"+(att_index)+"','"+(att_index+2)+"','base64'"; 
     907 
     908                        link_attachment.setAttribute("href", "javascript:download_attachments("+href+")"); 
     909 
     910                        var a_tmp = href.split(','); 
     911                        a_tmp[2] = fileName; 
     912                        s_tmp = escape(connector.serialize(a_tmp)); 
     913                                         
     914                        var check_attachment = document.createElement("INPUT"); 
     915                        check_attachment.type = 'CHECKBOX'; 
     916                        check_attachment.name = 'forwarding_attachments[]'; 
     917                        check_attachment.value = s_tmp; 
     918 
     919                        divFiles.appendChild(check_attachment); 
     920                        divFiles.appendChild(link_attachment); 
     921                        divFiles.appendChild(document.createElement("BR")); 
     922 
     923                        check_attachment.checked = true; 
     924                } 
     925        } 
     926                if (message_id) 
     927                        cExecute ("$this.imap_functions.delete_msgs&folder="+newMessageTab.imapBox[border_id]+"&msgs_number="+message_id,handler_delete_msg); 
     928                 
     929                if (preferences.auto_save_draft == 1) 
     930                                setTimeout('auto_save_msg('+border_id+')', autosave_time);               
     931 
     932                var save_link = Element("save_message_options"); 
     933                save_link.onclick = ''; 
     934                save_link.style.color = '#999'; 
     935                watch_changes_in_msg(border_id); 
     936                 
     937                write_msg(get_lang('Your message was save as draft in folder %1.', folder_name)); 
     938        }                
     939} 
     940 
     941function save_msg(border_id){ 
     942        if (newMessageTab.imapBox[border_id]) //Gets the imap folder 
     943                var folder_id = newMessageTab.imapBox[border_id]; 
     944        else 
     945                var     folder_id = "INBOX/"+draftsfolder; 
     946 
     947        if (folder_id == 'INBOX') // and folder name from border 
     948                var folder_name = get_lang(folder_id); 
     949        else 
     950                var folder_name = folder_id.substr(6); 
     951                 
     952        // hack to avoid form connector bug,  escapes quotation. Please see #179 
     953        tmp_border_id=border_id; 
     954        tmp_folder_name=folder_name; 
     955        tmp_folder_id=folder_id; 
     956        message_id = newMessageTab.imapUid[border_id]; 
     957        var handler_save_msg = function(data){ return_save(data,this.tmp_border_id,this.tmp_folder_name,this.tmp_folder_id,this.message_id); } 
     958         
     959        var textArea = document.createElement("TEXTAREA"); 
     960        textArea.style.display='none'; 
     961        textArea.name = "body"; 
     962        body = document.getElementById("body_"+border_id); 
     963        textArea.value += '<body>\r\n'; 
     964        textArea.value += body.contentWindow.document.body.innerHTML; 
     965        textArea.value += '\r\n</body>'; 
     966        var input_folder = document.createElement("INPUT"); 
     967        input_folder.style.display='none'; 
     968        input_folder.name = "folder"; 
     969        input_folder.value = folder_id; 
     970         
     971        if (is_ie){ 
     972                var i = 0; 
     973                while (document.forms(i).name != "form_message_"+border_id){i++} 
     974                form = document.forms(i); 
     975        } 
     976        else 
     977                form = document.forms["form_message_"+border_id]; 
     978        form.appendChild(textArea); 
     979        form.appendChild(input_folder); 
     980 
     981        cExecuteForm ("$this.imap_functions.save_msg", form, handler_save_msg,border_id);        
     982} 
     983 
     984function return_saveas(data,border_id,folder_name) 
     985{ 
     986        if(!verify_session(data)) 
     987                return; 
     988        if (data.append) 
     989        { 
     990                delete_border(border_id,null); 
     991                write_msg(get_lang('Your message was save as draft in folder %1.', folder_name)); 
     992        } 
     993        else 
     994                write_msg('ERROR saving your message.');                                         
     995} 
     996 
     997 
     998function save_as_msg(border_id, folder_id, folder_name){ 
     999        // hack to avoid form connector bug,  escapes quotation. Please see #179 
     1000        tmp_border_id=border_id; 
     1001        tmp_folder_name=folder_name; 
     1002        var handler_save_msg = function(data){ return_saveas(data,this.tmp_border_id,this.tmp_folder_name); }    
     1003        var textArea = document.createElement("TEXTAREA"); 
     1004        textArea.style.display='none'; 
     1005        textArea.name = "body"; 
     1006        body = document.getElementById("body_"+border_id); 
     1007        textArea.value += '<body>\r\n'; 
     1008        textArea.value += body.contentWindow.document.body.innerHTML; 
     1009        textArea.value += '\r\n</body>'; 
     1010         
     1011        var input_folder = document.createElement("INPUT"); 
     1012        input_folder.style.display='none'; 
     1013        input_folder.name = "folder"; 
     1014        input_folder.value = folder_id; 
     1015         
     1016        if (is_ie){ 
     1017                var i = 0; 
     1018                while (document.forms(i).name != "form_message_"+border_id){i++} 
     1019                form = document.forms(i); 
     1020        } 
     1021        else 
     1022                form = document.forms["form_message_"+border_id]; 
     1023        form.appendChild(textArea); 
     1024        form.appendChild(input_folder); 
     1025         
     1026        cExecuteForm ("$this.imap_functions.save_msg", form, handler_save_msg,border_id); 
     1027} 
     1028 
    7771029 
    7781030// Get checked messages 
Note: See TracChangeset for help on using the changeset viewer.