Changeset 6280


Ignore:
Timestamp:
05/23/12 11:44:51 (12 years ago)
Author:
marcieli
Message:

Ticket #2764 - Implementada modal de alarmes de mensagens com filtro de remetente

Location:
sandbox/2.4.1-1
Files:
23 added
6 edited

Legend:

Unmodified
Added
Removed
  • sandbox/2.4.1-1/expressoMail1_2/index.php

    r6224 r6280  
    7373                <script type="text/javascript" src="../prototype/modules/calendar/js/calendar.codecs.js"></script> 
    7474                 
     75                <link rel="stylesheet" type="text/css" href="../prototype/plugins/freeow/style/freeow/freeow.css" > 
     76                <script type="text/javascript" src="../prototype/plugins/freeow/jquery.freeow.min.js"></script> 
     77                <script type="text/javascript" src="../prototype/plugins/freeow/jquery.freeow.js"></script> 
    7578 
    7679                <script src="js/rich_text_editor.js" type="text/javascript"></script> 
  • sandbox/2.4.1-1/expressoMail1_2/js/main.js

    r6199 r6280  
    38173817}; 
    38183818 
     3819function truncate(text, size){ 
     3820        var result = text; 
     3821        if(text.length > size){ 
     3822                result = text.substring(0,size) + '...'; 
     3823        } 
     3824        return result; 
     3825} 
     3826 
    38193827DataLayer.links('message'); 
    38203828DataLayer.poll('message',30); 
  • sandbox/2.4.1-1/expressoMail1_2/templates/default/index.tpl

    r5878 r6280  
    211211<div id="sendFileMessages" style="display:none;"></div> 
    212212<div id="quickAddContact" style="display:none;"></div> 
     213<div id="freeow" class="freeow freeow-bottom-right"></div> 
    213214<!-- END list --> 
  • sandbox/2.4.1-1/prototype/modules/mail/css/followupflag.css

    r6167 r6280  
    209209span.removeLabeledMsg {margin:0 5px 0 5px;font-weight: bold;} 
    210210span.removeLabeledMsg:hover {cursor: pointer;} 
     211 
     212.freeow .gray:hover .background { 
     213    border-color: #fafafa; 
     214} 
     215.minimize-alarm { 
     216        background: url("../img/minimizar.png") no-repeat scroll 0 0 transparent; 
     217        height: 16px; 
     218    position: relative; 
     219    width: 16px; 
     220        float:right;  
     221        margin-right:5px; 
     222} 
     223.maximize-alarm { 
     224        background: url("../img/maximizar.png") no-repeat scroll 0 0 transparent; 
     225        height: 16px; 
     226    position: relative; 
     227    width: 16px; 
     228        float:right;  
     229        margin-right:5px; 
     230} 
     231.content-alarm ul { 
     232        max-height: 100px; 
     233        overflow: auto; 
     234} 
     235.content-alarm { 
     236        margin-top: 5px; 
     237} 
     238.freeow .gray .content { 
     239        margin: 5px; 
     240} 
     241.freeow .gray .background { 
     242        background-color: #fafafa; 
     243        border: 3px solid #fafafa; 
     244} 
     245.freeow .content { 
     246        margin: 5px; 
     247} 
     248.title-alarm { 
     249    margin-left: 90px; 
     250        font-size: 16px; 
     251} 
     252.alert-options { 
     253        border: none; 
     254} 
     255.confirm-alarm { 
     256        float:right; 
     257        margin: 5px; 
     258} 
     259.freeow .gray h2 { 
     260        font-size: 12px; 
     261} 
     262.freeow { 
     263        width: 325px; 
     264} 
  • sandbox/2.4.1-1/prototype/modules/mail/js/followupflag.js

    r6192 r6280  
    241241                                        updateCacheFollowupflag(selectedMessageIds, folders, true); 
    242242                                        winElement.dialog("close"); 
    243                                         alarmFollowupflagged(); 
     243                                        alarmFollowupflagged('followupflagAlarms'); 
    244244                                }); 
    245245                                winElement.find('.menu-configure-followupflag .save').button("option", "disabled", true); 
     
    318318                DataLayer.commit(false, false, function(){ 
    319319                        winElement.dialog("close"); 
    320                         alarmFollowupflagged(); 
     320                        alarmFollowupflagged('followupflagAlarms'); 
    321321                }); 
    322322                 
     
    462462/** 
    463463 * constrói as duas possíveis janela de alerta, utilizando o mesmo template 
     464 * para o parametro alert_type, espera-se vazio, followupflagAlarms ou filtersAlarms 
     465 * vazio: quando serão carregadas todas as modais de alarmes 
     466 * followupflagAlarms: quando serão carregadas as modais referentes à sinalizações 
     467 * filtersAlarms: quando será carregada a modal de filtros (nesse caso o parametro filter_list deve conter a lista de mensagens a ser exibida na modal) 
    464468 */ 
    465 function alarmFollowupflagged(){ 
    466     $('.followupflag-alarm').remove(); 
    467         var toIterate = [ 
    468                 { 
    469                         attrDeadline: 'doneDeadline',  
    470                         caption: {singular:'You have one undone message today:',  
    471                         plural:"You have %1 undone messages today:" 
    472                         }, 
    473                         onOk: function(event){ 
    474                                 if($(event.target).parents('.doneDeadline').find('[name="stopAlert"]').is(':checked')){ 
    475                                         $.cookie("fadeCompleted", (new Date).toString("dd/MM/yyyy"), {  
    476                                                 expires: 1  
    477                                         }); 
    478                                 } 
    479                         }, 
    480                         enable: ($.cookie("fadeCompleted") != (new Date).toString("dd/MM/yyyy")) 
    481                 }, 
    482                 { 
    483                         attrDeadline: 'alarmDeadline', 
    484                         caption: { 
    485                                 singular:'You have a follow up due for today:',  
    486                                 plural:'You have %1 follow ups due for today:' 
    487                         }, 
    488                         onOk: function(event){ 
    489                                 if($(event.target).parents('.alarmDeadline').find('[name="stopAlert"]').is(':checked')){ 
    490                                         $.cookie("fadeAlarm", (new Date).toString("dd/MM/yyyy"), {  
    491                                                 expires: 1  
    492                                         }); 
    493                                 } 
    494                         }, 
    495                         enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy")) 
    496                 } 
    497         ]; 
     469function alarmFollowupflagged(alert_type, filter_list){ 
     470        switch(alert_type){ 
     471                // carregar modais de sinalizadores 
     472                case 'followupflagAlarms': 
     473                        $('.doneDeadline').remove(); 
     474                        $('.alarmDeadline').remove(); 
     475                        var toIterate = [ 
     476                                { 
     477                                        attrDeadline: 'doneDeadline',  
     478                                        caption: {singular:'You have one undone message today:',  
     479                                        plural:"You have %1 undone messages today:" 
     480                                        }, 
     481                                        title: 'Concluídas', 
     482                                        enable: ($.cookie("fadeCompleted") != (new Date).toString("dd/MM/yyyy")) 
     483                                }, 
     484                                { 
     485                                        attrDeadline: 'alarmDeadline', 
     486                                        caption: { 
     487                                                singular:'You have a follow up due for today:',  
     488                                                plural:'You have %1 follow ups due for today:' 
     489                                        }, 
     490                                        title: 'Sinalizadas', 
     491                                        enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy")) 
     492                                } 
     493                        ]; 
     494                        break; 
     495                // carregar modal de filtros 
     496                case 'filtersAlarms': 
     497                        $('.listFilters').remove(); 
     498                        var toIterate = [ 
     499                                { 
     500                                        attrDeadline: 'filtersDeadline', 
     501                                        caption: { 
     502                                                singular:'Você tem uma mensagem arquivada:',  
     503                                                plural:'Você tem %1 mensagens arquivadas:' 
     504                                        }, 
     505                                        title: 'Filtro por remetente', 
     506                                        enable: ($.cookie("fadeFilterAlarm") != (new Date).toString("dd/MM/yyyy")) 
     507                                } 
     508                        ]; 
     509                        break; 
     510                // carregar todas as modais 
     511                default: 
     512                        $('.gray').remove(); 
     513                        var toIterate = [ 
     514                                { 
     515                                        attrDeadline: 'filtersDeadline', 
     516                                        caption: { 
     517                                                singular:'Você tem uma mensagem arquivada:',  
     518                                                plural:'Você tem %1 mensagens arquivadas:' 
     519                                        }, 
     520                                        title: 'Filtro por remetente', 
     521                                        enable: ($.cookie("fadeFilterAlarm") != (new Date).toString("dd/MM/yyyy")) 
     522                                }, 
     523                                { 
     524                                        attrDeadline: 'doneDeadline',  
     525                                        caption: {singular:'You have one undone message today:',  
     526                                        plural:"You have %1 undone messages today:" 
     527                                        }, 
     528                                        title: 'Concluídas', 
     529                                        enable: ($.cookie("fadeCompleted") != (new Date).toString("dd/MM/yyyy")) 
     530                                },                               
     531                                { 
     532                                        attrDeadline: 'alarmDeadline', 
     533                                        caption: { 
     534                                                singular:'You have a follow up due for today:',  
     535                                                plural:'You have %1 follow ups due for today:' 
     536                                        }, 
     537                                        title: 'Sinalizadas', 
     538                                        enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy")) 
     539                                } 
     540                        ]; 
     541                        break; 
     542        } 
    498543        var i = 0; 
     544        // recupera e monta os dados para serem exibidos nas modais de alarmes 
    499545        while (it = toIterate.pop()){ 
    500546                if (!it.enable) continue; 
    501  
    502                 var alarmInRange = DataLayer.get('followupflagged', {filter: ['AND', ['>', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).toString('yyyy-MM-dd 00:00:00')], ['<', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).addHours(24).toString('yyyy-MM-dd 00:00:00')]], criteria: {deepness: 1}}); 
     547                 
     548                var alarmInRange = {}; 
     549                // caso for alarme de sinalizadores 
     550                if(it.attrDeadline == 'doneDeadline' || it.attrDeadline == 'alarmDeadline'){ 
     551                        alarmInRange = DataLayer.get('followupflagged', {filter: ['AND', ['>', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).toString('yyyy-MM-dd 00:00:00')], ['<', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).addHours(24).toString('yyyy-MM-dd 00:00:00')]], criteria: {deepness: 1}}); 
     552                        if(alarmInRange.length > 0){ 
     553                                for(var i=0; i<alarmInRange.length; i++){ 
     554                                        if(alarmInRange[i].isDone == 1){ 
     555                                         alarmInRange.splice(i,1); 
     556                                         i--; 
     557                                        } 
     558                                } 
     559                        } 
     560                         
     561                        if(alarmInRange.length > 0){ 
     562                                var messages_alarm = []; 
     563                                for(var i=0; i<alarmInRange.length; i++){ 
     564                                        var date = Date.parseExact(alarmInRange[i][it.attrDeadline], 'yyyy-MM-dd HH:mm:ss'); 
     565                                        if(date) 
     566                                                alarmInRange[i][it.attrDeadline] = date.toString('HH:mm'); 
     567                                         
     568                                        if(alarmInRange[i]['followupflag']['id'] < 7){ 
     569                                                var nameFollowupflag = get_lang(alarmInRange[i]['followupflag']['name']); 
     570                                        }else{ 
     571                                                var nameFollowupflag = alarmInRange[i]['followupflag']['name']; 
     572                                        } 
     573                                        var li_alarm = alarmInRange[i][it.attrDeadline] + ' - ' + nameFollowupflag + ' - ' + truncate(alarmInRange[i]['message']['headers']['subject'], 15); 
     574                                        messages_alarm.push({ 
     575                                                "msg_number" : alarmInRange[i]['messageNumber'], 
     576                                                "msg_folder" : alarmInRange[i]['folderName'], 
     577                                                "a"                      : li_alarm 
     578                                        });                              
     579                                } 
     580                        } 
     581                }  
     582                // caso for alarme de filtros 
     583                else if(filter_list){ 
     584                        alarmInRange = filter_list; 
     585                        if(alarmInRange.length > 0){ 
     586                                var messages_alarm = []; 
     587                                for(var i=0; i<alarmInRange.length; i++){ 
     588                                        var d = new Date(alarmInRange[i]['udate']*1000); 
     589                                        var dia = d.getDate(); 
     590                                        if(dia < 10){ 
     591                                                dia = "0" + dia; 
     592                                        } 
     593                                        var mes = (d.getMonth()) + 1; 
     594                                        if(mes < 10){ 
     595                                                mes = "0" + mes; 
     596                                        } 
     597                                        var ano = d.getFullYear(); 
     598                                        var dtFormatada = dia + '/' + mes + '/' + ano; 
     599                                        alarmInRange[i]['udate'] = dtFormatada; 
     600                                                 
     601                                        var li_alarm = alarmInRange[i]['udate'] + ' ' + alarmInRange[i]['smalldate'] + ' - ' + alarmInRange[i]['from'] + ' - ' + truncate(alarmInRange[i]['subject'], 15); 
     602                                        messages_alarm.push({ 
     603                                                "msg_number" : alarmInRange[i]['msg_number'], 
     604                                                "msg_folder" : alarmInRange[i]['msg_folder'], 
     605                                                "a"                      : li_alarm 
     606                                        });                              
     607                                } 
     608                        } 
     609                } 
     610                                 
    503611                if(alarmInRange.length > 0){ 
    504                         for(var i=0; i<alarmInRange.length; i++){ 
    505                                 if(alarmInRange[i].isDone == 1){ 
    506                                  alarmInRange.splice(i,1); 
    507                                  i--; 
    508                                 } 
    509                         } 
    510                 } 
    511                 if(alarmInRange.length > 0){ 
    512                         for(var i=0; i<alarmInRange.length; i++){ 
    513                                 var date = Date.parseExact(alarmInRange[i][it.attrDeadline], 'yyyy-MM-dd HH:mm:ss'); 
    514                                 if(date) 
    515                                         alarmInRange[i][it.attrDeadline] = date.toString('HH:mm'); 
    516                         } 
    517612                        var caption = (alarmInRange.length == 1) ? 
    518613                                get_lang(it.caption.singular): 
     
    520615                                 
    521616                        var data = { 
    522                                 alarmInRange : alarmInRange,  
     617                                alarmInRange : messages_alarm,  
    523618                                caption: caption,  
    524                                 it : it 
    525619                        }; 
     620                        var type_alarm = it.attrDeadline; 
     621                        var ok_function = function(event, type, type_cookie){ 
     622                                if($(event.target).parents('.'+type).find('[name="stopAlert"]').is(':checked')){ 
     623                                        $.cookie(type_cookie, (new Date).toString("dd/MM/yyyy"), {  
     624                                                expires: 1  
     625                                        }); 
     626                                } 
     627                        } 
     628                        // carrega o template dos alarmes e cria a modal utilizando o plugin freeow 
    526629                        var dialogText = DataLayer.render("../prototype/modules/mail/templates/followupflag_alarm_list.ejs", data); 
     630                        var titulo = '<div class="header-alarm"><span class="title-alarm"><strong>'+it.title+'</strong></span><span name="header-icon" class="maximize-alarm"></span></div>' 
     631                        $("#freeow").freeow(titulo, dialogText, { 
     632                                classes: ["gray", type_alarm], 
     633                                autoHide: false,  
     634                                startStyle: null, 
     635                                onClick: function(event){ 
     636                                        var type = ''; 
     637                                        var type_cookie = ''; 
     638                                        if($(this).hasClass('alarmDeadline')){ 
     639                                                type = 'alarmDeadline'; 
     640                                                type_cookie = 'fadeAlarm'; 
     641                                        }else if($(this).hasClass('doneDeadline')){ 
     642                                                type = 'doneDeadline'; 
     643                                                type_cookie = 'fadeCompleted'; 
     644                                        }else if($(this).hasClass('filtersDeadline')){ 
     645                                                type = 'filtersDeadline'; 
     646                                                type_cookie = 'fadeFilterAlarm'; 
     647                                        } 
     648                                        if($(event.target).hasClass('stop-alert-alarm')){ 
     649                                                return; 
     650                                        } 
     651                                        if($(event.target).hasClass('minimize-alarm')){ 
     652                                                $('.'+type).find('.content-alarm').hide(); 
     653                                                $(event.target).removeClass('minimize-alarm'); 
     654                                                $(event.target).addClass('maximize-alarm'); 
     655                                                return; 
     656                                        } 
     657                                        if($(event.target).hasClass('maximize-alarm')){ 
     658                                                $('.'+type).find('.content-alarm').show(); 
     659                                                $(event.target).removeClass('maximize-alarm'); 
     660                                                $(event.target).addClass('minimize-alarm'); 
     661                                                return; 
     662                                        } 
     663                                        if($(event.target).hasClass('confirm-alarm')){ 
     664                                                ok_function(event, type, type_cookie); 
     665                                                $('.'+type).remove(); 
     666                                                return; 
     667                                        } 
     668                                        return false; 
     669                                } 
     670                        }); 
     671                        // elementos do freeow desnecessários 
     672                        $('.gray .background .content p').remove(); 
     673                        $('.gray .icon').remove(); 
     674                        $('.gray .close').remove(); 
    527675                         
    528                         /** 
    529                          * A última dialog criada é a dialog mais ao alto 
    530                          */ 
    531                         var offsetHeight = $('.ZebraDialog.right-bottom:last').length ?  
    532                                 $(window).height() - $('.ZebraDialog.right-bottom:last').position().top : 0; 
    533  
    534                         /** 
    535                          * Se for a primeira, desloca para cima do rodapé do grid 
    536                          * caso contrário desloca para um pouco acima da última dialog criada 
    537                          */ 
    538                         offsetHeight = !offsetHeight ? 35 : offsetHeight + 20 ;                  
    539                         var dialog = new $.Zebra_Dialog(dialogText, { 
    540                                 'buttons':  ['Ok'], 
    541                                 'modal': false, 
    542                                 'vcenter_short_message': false, 
    543                                 'position': ['right - 20', 'bottom - ' + offsetHeight.toString() ], 
    544                                 'custom_class': 'right-bottom followupflag-alarm '+it.attrDeadline 
    545                         }).dialog; 
    546                         $(".ZebraDialog.followupflag-alarm .ZebraDialog_Button0").click(it.onOk); 
    547                         $(".ZebraDialog.followupflag-alarm .display-options .more").click(function(event) { 
    548                                 $(event.target).parents('.followupflag-alarm').find('.message-list').css('height', 'auto'); 
    549                         }); 
     676                        // botão ok da modal com jquery button 
     677                        $('.content-alarm button').button(); 
    550678                }                
    551679        } 
     680         
     681        // controle de qual janela de alarme estará maximizada 
     682        $('.gray').find('.content-alarm').hide(); 
     683        if($('.gray').length > 0){ 
     684                if($('.gray').hasClass('filtersDeadline')){ 
     685                        $('.filtersDeadline').find('.content-alarm').show(); 
     686                        $('.filtersDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm'); 
     687                        $('.filtersDeadline .header-alarm [name="header-icon"]').addClass('minimize-alarm'); 
     688                }else if($('.gray').hasClass('alarmDeadline')){ 
     689                        $('.alarmDeadline').find('.content-alarm').show(); 
     690                        $('.alarmDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm'); 
     691                        $('.alarmDeadline .header-alarm [name="header-icon"]').addClass('minimize-alarm');               
     692                }else if($('.gray').hasClass('doneDeadline')){ 
     693                        $('.doneDeadline').find('.content-alarm').show(); 
     694                        $('.doneDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm'); 
     695                        $('.doneDeadline .header-alarm [name="header-icon"]').addClass('minimize-alarm');                        
     696                } 
     697        } 
     698         
    552699} 
    553700$('#main_table').ready(function(){ 
  • sandbox/2.4.1-1/prototype/modules/mail/templates/followupflag_alarm_list.ejs

    r5738 r6280  
    1 <p class="title"><strong><%= data.caption %> </strong></p> 
    2  
    3 <ul class="message-list"> 
    4 <% 
    5 for(var i=0; i<data.alarmInRange.length; i++){ 
    6         var openMessageScript = "cExecute('$this.imap_functions.get_info_msg&msg_number="+data.alarmInRange[i].messageNumber+"&msg_folder="+data.alarmInRange[i].folderName+"&alarm=true', show_msg);"; 
    7         if(data.alarmInRange[i].followupflag.id < 7){ 
    8                 var nameFollowupflag = get_lang(data.alarmInRange[i].followupflag.name); 
    9         }else{ 
    10                 var nameFollowupflag = data.alarmInRange[i].followupflag.name; 
     1<div class="content-alarm"> 
     2        <span class="subtitle-alarm"> 
     3                <strong><%=data.caption %></strong> 
     4        </span> 
     5        <ul class="message-list"> 
     6        <% 
     7        for(var i=0; i<data.alarmInRange.length; i++){ 
     8                var openMessageScript = "cExecute('$this.imap_functions.get_info_msg&msg_number="+data.alarmInRange[i].msg_number+"&msg_folder="+data.alarmInRange[i].msg_folder+"&alarm=true', show_msg);"; 
     9        %> 
     10                <li class="message-item"> 
     11                        <a onclick="<%=openMessageScript%>"> 
     12                                <%= data.alarmInRange[i].a %> 
     13                        </a> 
     14                </li> 
     15        <% 
    1116        } 
    12 %> 
    13         <li class="message-item"> 
    14                 <a onclick="<%=openMessageScript%>"> 
    15                         <%= (it.attrDeadline == 'alarmDeadline') ? data.alarmInRange[i].alarmDeadline : data.alarmInRange[i].doneDeadline %> - <%= nameFollowupflag %> - <%= data.alarmInRange[i].message.headers.subject %> 
    16                 </a> 
    17         </li> 
    18 <% 
    19 } 
    20 %> 
    21 </ul>  
    22  
    23 <fieldset class="alert-options"> 
    24         <input type="checkbox" name="stopAlert"> <label><%= get_lang("Don't show this window anymore today.")%></label> 
    25 </fieldset> 
     17        %> 
     18        </ul>  
     19        <fieldset class="alert-options"> 
     20                <input type="checkbox" class="stop-alert-alarm" name="stopAlert"> <label><%= get_lang("Don't show this window anymore today.")%></label> 
     21                <button class="confirm-alarm">Ok</button> 
     22        </fieldset> 
     23</div> 
Note: See TracChangeset for help on using the changeset viewer.