source: trunk/prototype/modules/mail/js/followupflag.js @ 7612

Revision 7612, 31.7 KB checked in by marcieli, 11 years ago (diff)

Ticket #3219 - Correcoes de problemas provocados ao alterar z-index dos zebraDialogs dos filtros.

  • Property svn:executable set to *
RevLine 
[6641]1MsgsCallbackFollowupflag = {
2
3    '#FollowupflagMessageIdError': function(){
4        alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém o atributo message-id.');
5    },
6    '#FollowupflagLimitError': function(){
7        alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: limite de flags atingido para esta pasta.');
8    },
9    '#FollowupflagParamsError': function(){
10        alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém todos os atributos necessários.');
11    }
12   
13}
14
[5625]15function updateCacheFollowupflag(msgNumber, msgFolder, op){
16        if(op){
17                if(typeof msgNumber == 'object'){
18                        var extend = DataLayer.get('followupflagged', {
19                                filter: ['AND', ['IN', 'messageNumber', msgNumber], ['IN', 'folderName', msgFolder]],
20                                criteria: {deepness: 1}
21                        }, true);
22                } else{
23                        var extend = DataLayer.get('followupflagged', {
24                                filter: ['AND', ['=', 'messageNumber', msgNumber], ['=', 'folderName', msgFolder]],
25                                criteria: {deepness: 1}
26                        }, true);
27                }
28
29               
30                if(extend != "" || extend != 'undefined' || extend != []){
31                        for(var i = 0; i < extend.length; i++){
[6253]32                                if(!(onceOpenedHeadersMessages[extend[i].folderName])){
33                                        onceOpenedHeadersMessages[extend[i].folderName] = {};
34                                }
35                                if(!(onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber])){
36                                        onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber] = []; 
37                                }
38                                onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]['followupflagged'] = {};
39                                DataLayer.merge(onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]['followupflagged'], extend[i]);
40                               
41                                /*
[5625]42                                if(onceOpenedHeadersMessages[extend[i].folderName]){
43                                        if(onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]){
44                                                onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]['followupflagged'] = {};
45                                                DataLayer.merge(onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]['followupflagged'], extend[i]);
46                                        }
[6253]47                                }*/
[5625]48
49                        }
50                }
51        }else{
52                onceOpenedHeadersMessages[msgFolder][msgNumber]['followupflagged'] = undefined;
53        }
54}
55
[5533]56function init_followup(data){
57
58        winElement = data.window;
59        selectedMessageIds = data.selectedMessages;
60        folder = current_folder;
61
62        /**
63         * Implementação do widget de input-combobox
64         */
[5610]65 
[5533]66        (function( $ ) {
67                $.widget( "ui.combobox", {
68                        _create: function() {
69                                var self = this,
70                                        select = this.element.hide(),
71                                        selected = select.children( ":selected" ),
72                                        value = selected.val() ? selected.text() : "";
73                                var input = this.input = $( "<input>" )
74                                        .insertAfter( select )
75                                        .val( value )
76                                        .autocomplete({
77                                                delay: 0,
78                                                minLength: 0,
79                                                source: function( request, response ) {
80                                                        var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
81                                                        response( select.children( "option" ).map(function() {
82                                                                var text = $( this ).text();
83                                                                if ( this.value && ( !request.term || matcher.test(text) ) )
84                                                                        return {
85                                                                                label: text.replace(
86                                                                                        new RegExp(
87                                                                                                "(?![^&;]+;)(?!<[^<>]*)(" +
88                                                                                                $.ui.autocomplete.escapeRegex(request.term) +
89                                                                                                ")(?![^<>]*>)(?![^&;]+;)", "gi"
90                                                                                        ), "<strong>$1</strong>" ),
91                                                                                value: text,
92                                                                                option: this
93                                                                        };
94                                                        }) );
95                                                },
96                                                select: function( event, ui ) {
97                                                        ui.item.option.selected = true;
98                                                        self._trigger( "selected", event, {
99                                                                item: ui.item.option
100                                                        });
101                                                },
102                                                change: function( event, ui ) {
103                                                        if ( !ui.item ) {
104                                                                var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" ),
105                                                                        valid = false;
106                                                                select.children( "option" ).each(function() {
107                                                                        if ( $( this ).text().match( matcher ) ) {
108                                                                                this.selected = valid = true;
109                                                                                return false;
110                                                                        }
111                                                                });
[5576]112                                                                /*
[5533]113                                                                if ( !valid ) {
114                                                                        // remove invalid value, as it didn't match anything
115                                                                        $( this ).val( "" );
116                                                                        select.val( "" );
117                                                                        input.data( "autocomplete" ).term = "";
118                                                                        return false;
119                                                                }
[5576]120                                                                */
121                                                                if ( !valid ) {
122                                                                        if(select.has('option[value="custom"]').length > 0) {
123                                                                                select.find('option:last').val('custom').html($(this).val()).attr('selected', 'selected');
124                                                                        } else {
125                                                                                select.append(select.find('option:last').clone().val('custom').html($(this).val()));
126                                                                                select.find('option[value="custom"]').attr('selected', 'selected');
127                                                                        }
128                                                                }
[5533]129                                                        }
130                                                }
131                                        })
132                                        .addClass( "ui-widget ui-widget-content ui-corner-left" );
133
134                                input.data( "autocomplete" )._renderItem = function( ul, item ) {
135                                        return $( "<li></li>" )
136                                                .data( "item.autocomplete", item )
137                                                .append( "<a>" + item.label + "</a>" )
138                                                .appendTo( ul );
139                                };
140
141                                this.button = $( "<button type='button'>&nbsp;</button>" )
142                                        .attr( "tabIndex", -1 )
143                                        .attr( "title", "Show All Items" )
144                                        .insertAfter( input )
145                                        .button({
146                                                icons: {
147                                                        primary: "ui-icon-triangle-1-s"
148                                                },
149                                                text: false
150                                        })
151                                        .removeClass( "ui-corner-all" )
152                                        .addClass( "ui-corner-right ui-button-icon" )
153                                        .click(function() {
154                                                // close if already visible
155                                                if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
156                                                        input.autocomplete( "close" );
157                                                        return;
158                                                }
159
160                                                // work around a bug (likely same cause as #5265)
161                                                $( this ).blur();
162
163                                                // pass empty string as value to search for, displaying all results
164                                                input.autocomplete( "search", "" );
165                                                input.focus();
166                                        });
167                        },
168
169                        destroy: function() {
170                                this.input.remove();
171                                this.button.remove();
172                                this.element.show();
173                                $.Widget.prototype.destroy.call( this );
174                        }
175                });
176        })( jQuery );
177        /**
178         * #END: Implementação do widget de input-combobox
179         */
[6996]180         winElement.find('input[name="alarmDate"]').change(function(event){
181                winElement.find('input[name="alarmTime"]').attr('disabled', ( $(this).val() == "" ? 'disabled' : false));
182         });
[5533]183
[6996]184         winElement.find('input[name="alarmDate"]').keyup(function(event){
185                winElement.find('input[name="alarmTime"]').attr('disabled', ( $(this).val() == "" ? 'disabled' : false)).val('');
186         });
187
[5533]188        winElement.find('.button').button()
189        .filter('.menu-configure-followupflag .cancel').click(function(){
190                winElement.dialog("close");
191        }).end()
192       
193        .filter('.menu-configure-followupflag .save').click(function(){
[5660]194        var saveFollowupflagged = function(){
195                var idFollowupflagged = winElement.find('[name="followupflagId"]').val();
[5664]196                        idFollowupflagged = idFollowupflagged.split(',');
197                        for(x=0; x<idFollowupflagged.length; x++){
198                                (idFollowupflagged[x] == "false") ? idFollowupflagged[x] = false : idFollowupflagged;
[5660]199                        }
200                for(i=0; i<selectedMessageIds.length; i++){
[5640]201                                var isDone = winElement.find('[name="done"]').is(':checked') ? 1 : 0;
202                                var alarmDate = false;
203                                var doneDate  = false;
204                                var folder_name;
205                                var folders = [];
206                                var messages = [];
207                                var roles = get_selected_messages_search_role().split(',');
208                                for (var i=0; i < selectedMessageIds.length; i++ ){
209                                        if (currentTab == 0) {
210                                                folder_name = current_folder;
211                                                var messageNumber = selectedMessageIds[i];
212                                        }else{
213                                                var tr = $('[role="'+roles[i]+'"]');
214                                                folder_name = $(tr).attr('name');
215                                                var id = $(tr).attr('id');
216                                                var messageNumber = id.replace(/_[a-zA-Z0-9]+/,"");
217                                        }
218                                        folders.push(folder_name);
219                                       
[5660]220                                                var followupflagged = DataLayer.merge({
221                                                        uid : User.me.id,
222                                                        followupflagId : followupflagId,
223                                                        folderName : folder_name,
224                                                        messageNumber : messageNumber,
225                                                        isDone: isDone,
[6996]226                                                        isSent: 0,
[5660]227                                                        backgroundColor : backgroundColor
[5664]228                                                }, !!idFollowupflagged[i] ? {id: idFollowupflagged[i]} : {});
[5640]229                                       
230                                        if (alarmDate = winElement.find('[name="alarmDate"]').datepicker("getDate")) {
231                                                if (alarmTime = winElement.find('[name="alarmTime"]').datepicker("getDate")) {
232                                                        alarmDate.set({hour:alarmTime.getHours(), minute:alarmTime.getMinutes()});
233                                                }
[5825]234                                                followupflagged.alarmDeadline = alarmDate.toString('yyyy-MM-dd HH:mm:ss');
[5640]235                                        }
236
237                                        if (doneDate = winElement.find('[name="doneDate"]').datepicker("getDate")) {
238                                                if (doneTime = winElement.find('[name="doneTime"]').datepicker("getDate")) {
239                                                        doneDate.set({hour:doneTime.getHours(), minute:doneTime.getMinutes()});
240                                                }
[5825]241                                                followupflagged.doneDeadline = doneDate.toString('yyyy-MM-dd HH:mm:ss');
[5640]242                                        }
243                                       
244                                        /**
245                                         * Aplica o ícone correspondente na lista de mensagens do expressoMail
246                                         */
247                                        if(current_folder == folder_name){
248                                                var flagged = $('#td_message_followup_' + messageNumber + ', tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).find(".flag-edited");
249                                        } else{
250                                                var flagged = $('tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).find(".flag-edited");
251                                        }
252                                        if(isDone){
253                                                flagged.find("img").attr("src", "../prototype/modules/mail/img/flagChecked.png").css("margin-left","-3px");
254                                        }else{
[7543]255                                                flagged.css({"background-image":"url(../prototype/modules/mail/img/mail-sprites.png)","background-position":"0 -864px","margin-left":"0"});                     
[5640]256                                        }
257                                       
[5649]258                                        var followupflagName = winElement.find('[name="name"] option:selected').text();
[5640]259                                        if(current_folder == folder_name){
260                                                $('#td_message_followup_' + messageNumber + ', ' +
[5929]261                                                'tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).attr('title', followupflagName).find(".flag-edited").css("background", backgroundColor);
[5640]262                                        }else{
[5929]263                                                $('tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).attr('title', followupflagName).find(".flag-edited").css("background", backgroundColor);
[5640]264                                        } 
265                                        /**
266                                         * Salva ou, caso já exista, atualiza
267                                         */
268                                        DataLayer.put('followupflagged', followupflagged);
269                                }
[5533]270                               
[5640]271                                DataLayer.commit(false, false, function(data){
272                                        winElement.find('.menu-configure-followupflag .delete').button("option", "disabled", false);
273                                        updateCacheFollowupflag(selectedMessageIds, folders, true);
[5829]274                                        winElement.dialog("close");
[6487]275                                        alarmFollowupflagged('followupflagAlarms');
[7247]276                                        var fail = 'success';
277                                        $.each(data,function(index,value){
278                                                if (typeof value == 'string'){
279                                                        fail = value;
280                                                }                               
281                                        });
282                                        if (fail == '#FollowupflagMessageIdError'){
283                                                 alert('Uma ou mais mensagens não puderam ser sinalizadas. \nDetalhes do erro: mensagem não contém o atributo message-id.');
284                                        }
285                                        else if (fail == '#FollowupflagLimitError'){
286                                                 alert('Uma ou mais mensagens não puderam ser sinalizadas. \nDetalhes do erro: limite de flags atingido para esta pasta.');     
287                                        }
288                                        $.each(selectedMessageIds,function(index,value){       
289                                                var flagged = DataLayer.get('followupflagged', {filter: [
290                                                        'AND',
291                                                        ['=', 'messageNumber', value],
292                                                        ['=', 'folderName', folder_name]
293                                                ]});
294                                                if (!flagged)
295                                                        $('#td_message_followup_'+value).find(".flag-edited").css("background","#cccccc");
296                                        });                                     
[5640]297                                });
[5649]298                                winElement.find('.menu-configure-followupflag .save').button("option", "disabled", true);
[5829]299                               
[5640]300               
[5660]301                }
[7042]302                selectAllFolderMsgs(false);
[5660]303    }
[7246]304                winElement.find('[name="name"]').next().data("autocomplete")._trigger("change");
[5533]305                var backgroundColor = winElement.find('[name="backgroundColor"]').val();
306                var followupflagId  = winElement.find('[name="name"] option:selected').val();
[5576]307                if (followupflagId == 'custom') {
308                        DataLayer.put('followupflag', {name:winElement.find('[name="name"] option:selected').text(), uid:User.me.id});
[5640]309                        DataLayer.commit(false, false, function(data){
[6152]310                                $.each(data, function(index, value) {
311                                        if(typeof value == 'object'){
312                                                followupflagId = value.id;
313                                        }
314                                });
[5640]315                                winElement.find('[name="name"] option[value="custom"]').val(followupflagId);
316                                saveFollowupflagged();
317                        });
318                }else{
319                        saveFollowupflagged();
320                }       
[5533]321
322        }).end()
323       
324        .filter('.menu-configure-followupflag .delete').click(function(){
[5576]325                if (selectedMessageIds.length == 0) $(this).button("option", "disabled", true);
[5697]326                /** TODO Mudar quando melhorias forem implementadas na API de atualização do cache */
327                DataLayer.remove('followupflagged', false);
[5708]328                DataLayer.get('followupflagged');
[5697]329                var roles = get_selected_messages_search_role().split(',');
330                for (var i=0; i < selectedMessageIds.length; i++ ){
[5588]331                                if (currentTab == 0) {
332                                        folder_name = current_folder;
333                                        var messageNumber = selectedMessageIds[i];
334                                }else{
335                                        var tr = $('[role="'+roles[i]+'"]');
336                                        folder_name = $(tr).attr('name');
337                                        var id = $(tr).attr('id');
338                                        var messageNumber = id.replace(/_[a-zA-Z0-9]+/,"");
[5929]339                                }                               
340                               
[5548]341                        if(onceOpenedHeadersMessages[folder_name][messageNumber]['followupflagged']){
[5564]342                                if(onceOpenedHeadersMessages[folder_name][messageNumber]['followupflagged'].id){
343                                        var flag_id = onceOpenedHeadersMessages[folder_name][messageNumber]['followupflagged'].id;
[5711]344                                        DataLayer.remove('followupflagged', flag_id );
[5697]345                                        /**
346                                         * TODO - corrigir o formato do ID no DataLayer, para que seja utilizado o ID composto
347                                         * ao invés do ID do PostgreSQL atualmente em uso.
348                                         */
349                                         
350                                        /**
351                                         * # hack necessário enquanto o DataLayer não reconhece o ID composto. Trocar o
352                                         * código abaixo pela chamada trivial de DataLayer.remove('followupflagged', idCompost)
353                                         */
[5708]354                                        // var data = {};
355                                        // data[ 'followupflagged://' + folder_name + '/' + messageNumber + '#' + flag_id ] = false;
356                                        // DataLayer.dispatch('Sync', data, false, true);
[5697]357                                       
[5584]358                                        if(current_folder == folder_name){
359                                                $('#td_message_followup_' + messageNumber + ', ' +
[5929]360                                                  'tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).attr('title', '').find(".flag-edited").css("background", '#CCC');
[5584]361                                                $('#td_message_followup_' + messageNumber + ', ' +
362                                                        'tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).find(".flag-edited")
[7543]363                                                        .css({"background-image":"url(../prototype/modules/mail/img/mail-sprites.png)","background-position":"0 -864px","margin-left":"0"});
[5584]364                                        }else{
[5929]365                                                $('tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).attr('title', '').find(".flag-edited").css("background", '#CCC');
[5584]366                                                $('tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).find(".flag-edited")
[7543]367                                                        .css({"background-image":"url(../prototype/modules/mail/img/mail-sprites.png)","background-position":"0 -864px","margin-left":"0"});
[5584]368                                        }
[5625]369                                        updateCacheFollowupflag(messageNumber, folder_name, false);
[5564]370                                }
[5548]371                        }
[5533]372                }
[5829]373                DataLayer.commit(false, false, function(){
374                        winElement.dialog("close");
[6487]375                        alarmFollowupflagged('followupflagAlarms');
[5829]376                });
[7042]377                selectAllFolderMsgs(false);
[5533]378        });
[5577]379       
[5576]380        /**
381         * Se houver mudança, habilita o botão "Save"
382         */
383        winElement.find(':input').change(function(event){
384                if (event.keyCode != '27' && event.keyCode != '13')
[5577]385                        winElement.find('.menu-configure-followupflag .save').button("option", "disabled", false);
[5576]386        }).keydown(function(event){
387                if (event.keyCode != '27' && event.keyCode != '13')
[5577]388                        winElement.find('.menu-configure-followupflag .save').button("option", "disabled", false);
[5660]389        });
[5576]390       
[5533]391        winElement.find('.date').datepicker();
392        winElement.find('.time').timepicker({});
[5893]393        winElement.find('[name="name"]').combobox()
394        //pega o botão criado
395        .next().next().click(function (event, ui){     
396                $(".ui-autocomplete.ui-menu li").css("position","relative");
397                $(".ui-autocomplete.ui-menu li a:gt(5)").append("<span class='ui-icon ui-icon-only ui-icon-close delete_followupflag'></span>").find("span").click(function(event){
398                        var id = $('.followupflag-configure').find('option')[$(this).parents('li').index()].value;
[5929]399                        var nameFollowupflag = $('.followupflag-configure').find('option')[$(this).parents('li').index()].text;
400                        var removeLi = $(this).parents("li");           
401                       
402                        $.Zebra_Dialog(get_lang('All messages flagged with the flag type ') + '<strong>'+ nameFollowupflag + '</strong>' + get_lang(' will be removed. This action cannot be undone. Want to continue?'), {
403                                'type':     'question',
[7612]404                                'custom_class': (is_ie ? 'configure-zebra-dialog custom-zebra-filter' : 'custom-zebra-filter'),
[5929]405                                'title':    'Atenção',
406                                'buttons': ['Sim','Não'],               
407                                'overlay_opacity': '0.5',
408                                'onClose':  function(caption) {
409                                        if(caption == 'Sim'){
410                                                var listFollowupflag = DataLayer.get('followupflagged', ['=', 'followupflagId', id]);
411                                                for (var i=0; i < listFollowupflag.length; i++)
[6024]412                                                        DataLayer.remove('followupflagged', listFollowupflag[i].id);
[5929]413
414                                                DataLayer.remove('followupflag',false);                                 
415                                                DataLayer.get('followupflag');
416
417                                                DataLayer.remove('followupflag', ''+id);                                               
418                                                DataLayer.commit(false, false, function(data){
419                                                        $('[title="'+nameFollowupflag+'"]').attr('title', '').find('div').css({backgroundColor:'#CCC'});
420                                                        $(removeLi).remove();
421                                                        $('option[value="'+ id +'"]').remove();
[6192]422                                                        $('.ui-autocomplete.ui-menu li:first');
[5929]423                                                        $('.followupflag-configure').find('option:first').attr("selected","selected");                                                 
[6192]424                                                        $('.ui-autocomplete-input').val($('.followupflag-configure').find('option:selected').text());
425                                                       
426                                                        for(var i=0; i<listFollowupflag.length; i++){
427                                                                if(listFollowupflag[i].id == winElement.find('[name="followupflagId"]').val()){
428                                                                        winElement.find('[name="followupflagId"]').val("");
429                                                                }
430                                                        }                                               
[5929]431                                                });                     
432                                                event.stopImmediatePropagation();
433                                        }
434                                }
435                        });     
436                        if(is_ie)
437                                $(".ZebraDialogOverlay").css("z-index","1006");
[5893]438                });
439
440        });
[5738]441        winElement.find('.ui-corner-right.ui-button-icon').attr('title', get_lang('Show All Items'));
[5576]442
[5610]443        winElement.find('[name="alarmDate"],[name="alarmTime"]').attr("disabled","disabled");
[5533]444       
[7229]445        winElement.find('.menu-configure-followupflag .delete').button("option", "disabled", true);     
446        var idFollowupflag = winElement.find('[name="followupflagId"]').val();
447                idFollowupflag = idFollowupflag.split(',');
448       
449        $.each(idFollowupflag, function(index,value){
450                if (value != "false" ){
451                        winElement.find('.menu-configure-followupflag .delete').button("option", "disabled", false);
452                }
453        });
454
[5533]455        winElement.find('[name="alarm"]').click(function(){
456                if($(this).is(":checked")){
[6996]457                        winElement.find('[name="alarmDate"]').removeAttr("disabled");                   
[5533]458                }else{
[6996]459                        winElement.find('[name="alarmDate"],[name="alarmTime"]').attr("disabled","disabled").val('');
[5533]460                }
[5610]461        });
[6996]462
[5610]463        if(winElement.find('[name="alarm"]').is(":checked")){
464                winElement.find('[name="alarmDate"],[name="alarmTime"]').removeAttr("disabled");
465        }
[6996]466       
[5533]467        winElement.find('[name="done"]').click(function(){
468                if($(this).is(":checked")){
469                        winElement.find(".input-done input").attr("disabled","disabled");
470                }else{
471                        winElement.find(".input-done input").removeAttr("disabled");
472                }
473        });
474
475
476        winElement.find(".followupflag-color-fields").hide();
477        winElement.find(".followupflag-color.sample-list .sample-item").click(function(){
[5674]478                winElement.find('.menu-configure-followupflag .save').button("enable");
[5533]479                winElement.find(".followupflag-color.sample-list .sample-item").removeClass("selected");
480                $(this).addClass("selected");
481                var color = $(this).attr('alt');
482                winElement.find('[name="backgroundColor"]').css('background-color', color).val(color)
483        });
484       
485        winElement.find(".followupflag-color.sample-list .sample-item.selected").trigger('click');
486                               
[5674]487        winElement.find('[name="setColor"]').change(function(){
[5533]488                if(winElement.find('[name="setColor"]').val() == "default"){
489                        winElement.find(".followupflag-color.sample-list").show("fast");
490                        winElement.find(".followupflag-color-fields").hide();
491                        winElement.find(".followupflag-color.sample-list .sample-item.selected").trigger('click');
[5674]492                } else if(winElement.find('[name="setColor"]').val() == "custom"){     
[5533]493                        winElement.find(".followupflag-color-fields").show("fast");
494                        winElement.find(".followupflag-color.sample-list").hide();
495                        winElement.find(".colorwell").focus();
496                }               
497        });
498       
[5571]499        if(winElement.find('[name="setColor"] option:selected').val() == "custom"){
500                winElement.find('[name="setColor"]').trigger("change");
[5533]501        }
502
503        var colorpickerPreviewChange = function(color) {
[5674]504                winElement.find('.menu-configure-followupflag .save').button("enable");
[5533]505                winElement.find('.colorwell-selected').val(color).css('background-color', color);
506                winElement.find('.flag-color-preview').css('background',color);
507        }
508
509        var f = $.farbtastic(winElement.find('.colorpicker'), colorpickerPreviewChange);
510        var selected;                                   
511        winElement.find('.colorwell').each(function () {
512                f.linkTo(this);
513        }).focus(function() {
514                if (selected) {
515                        $(selected).removeClass('colorwell-selected');
516                }
517                $(selected = this).addClass('colorwell-selected');
518                f.linkTo(this, colorpickerPreviewChange);
519                f.linkTo(colorpickerPreviewChange);
520               
521        });
[5571]522        if(winElement.find('[name="setColor"] option:selected').val() == "custom"){
[5533]523                winElement.find(".colorwell").focus();
524        }
525
526}
[5576]527
528
529/**
[6487]530 * constrói as três possíveis janelas de alerta, utilizando o mesmo template
531 * para o parametro alert_type, espera-se vazio, followupflagAlarms ou filtersAlarms
532 * vazio: quando serão carregadas todas as modais de alarmes
533 * followupflagAlarms: quando serão carregadas as modais referentes à sinalizações
534 * 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)
[5576]535 */
[6487]536function alarmFollowupflagged(alert_type, filter_list){
[6996]537        var currentDate = new Date().toString("dd/MM/yyyy");
538        var data = {alarmDeadline: false, doneDeadline: false, filtersAlarms: false};
539
[6487]540        switch(alert_type){
541                case 'followupflagAlarms':
542                        $('.doneDeadline').remove();
543                        $('.alarmDeadline').remove();
[6996]544                        data.alarmDeadline = $.cookie("fadeAlarm") != currentDate ? true : false;
545                        data.doneDeadline = $.cookie("fadeCompleted") != currentDate ? true : false;
546                break;
[6487]547                case 'filtersAlarms':
548                        $('.filtersDeadline').remove();
[6996]549                        data.filtersAlarms = $.cookie("fadeFilterAlarm") != currentDate ? true : false;
550                break;
[6487]551                default:
552                        $('.gray').remove();
[6996]553                        data.alarmDeadline = $.cookie("fadeAlarm") != currentDate ? true : false;
554                        data.doneDeadline = $.cookie("fadeCompleted") != currentDate ? true : false;
555                        data.filtersAlarms = $.cookie("fadeFilterAlarm") != currentDate ? true : false;
556                break;
557        };
558
559        var startDate = (new Date()).set({hour:0, minute:0, second:0}).toString('yyyy-MM-dd 00:00:00');
560        var endDate = (new Date()).set({hour:0, minute:0, second:0}).addHours(24).toString('yyyy-MM-dd 00:00:00');
561
562        if(data.alarmDeadline){
563                var decodeAlarms = {'sent': [], 'task':[]};     
564                alarms = DataLayer.get('followupflagged',
565                        {
566                                filter: ['AND', ['<', 'alarmDeadline', endDate], ['=','isSent','0'], ['=','isDone','0']],
567                                criteria: {deepness: 1}
568                        });
569
570                if(alarms.length > 0){
571                        var itens = [];
572                        for(var i = 0; i < alarms.length; i++){
573
574                                var date = Date.parseExact(alarms[i]['alarmDeadline'], 'yyyy-MM-dd HH:mm:ss');
575                        alarms[i]['alarmDeadline'] = date.toString('dd/MM HH:mm');
576
577                                var nameFollowupflag = alarms[i]['followupflag']['id'] < 7 ? get_lang(alarms[i]['followupflag']['name']) : alarms[i]['followupflag']['name'];
578                                var li_alarm = alarms[i]['alarmDeadline'] + ' - ' + nameFollowupflag + ' - ' + alarms[i]['message']['headers']['subject'];
579
580                                if(alarms[i]['doneDeadline'] != ''){
581                                        var dateDone = Date.parseExact(alarms[i]['doneDeadline'], 'yyyy-MM-dd HH:mm:ss');
582                                        if(dateDone.getTime() < $.now())
583                                                continue;
[6487]584                                }
[6996]585
586                                if(date.getTime() <= $.now())
587                                        decodeAlarms.sent.push({
588                                                "msg_number" : alarms[i]['messageNumber'],
589                                                "msg_folder" : alarms[i]['folderName'],
590                                                "a"                      : truncate(li_alarm, 34),
591                                                'id' : alarms[i].id
592                                        });
593                        else
594                                decodeAlarms.task.push({
595                                                a: truncate(li_alarm, 34),
596                                                sentTime:  date.getTime() / 1000,
597                                                id: alarms[i].id,
598                                                'msg_folder': alarms[i].folderName,
599                                                'msg_number': alarms[i].messageNumber
600                                        });
601                        }
602
603                        if(decodeAlarms.task.length)
604                                alarmDeadline.load(decodeAlarms.task);
605
606                        if(decodeAlarms.sent.length)
607                                data.alarmDeadline = {
608                                                alarms: decodeAlarms.sent,
609                                                title: get_lang('Follow ups'),
610                                                caption: (itens.length == 1) ? get_lang('You have one undone message today:') : get_lang('You have %1 follow ups due for today:', decodeAlarms.sent.length),
611                                                type: 'alarmDeadline'
612                                        };
613                        else
614                                data.alarmDeadline = false;
615                }else
616                        data.alarmDeadline = false;
[6487]617        }
[6996]618
619        if(data.doneDeadline){
620                alarms = DataLayer.get('followupflagged', {filter: ['AND', ['>', 'doneDeadline', startDate], ['<', 'doneDeadline', endDate]], criteria: {deepness: 1}});
621
622                if(alarms.length > 0){
623                        var itens = [];
624                        for(var i = 0; i < alarms.length; i++){
625
626                            var date = Date.parseExact(alarms[i]['doneDeadline'], 'yyyy-MM-dd HH:mm:ss');
627                            alarms[i]['doneDeadline'] = date.toString('dd/MM HH:mm');
628
629                            var nameFollowupflag = alarms[i]['followupflag']['id'] < 7 ? get_lang(alarms[i]['followupflag']['name']) : alarms[i]['followupflag']['name'];
630                            var li_alarm = alarms[i]['doneDeadline'] + ' - ' + nameFollowupflag + ' - ' + truncate(alarms[i]['message']['headers']['subject'], 15);
631
632                            itens.push({
633                                    a: truncate(li_alarm, 34),
634                                    id: alarms[i].id,
635                                    'msg_folder': alarms[i].folderName,
636                                    'msg_number': alarms[i].messageNumber
637                            });
[5880]638                        }
[6996]639                    data.doneDeadline = {
640                        alarms: itens,
641                        title: get_lang('Done'),
642                        caption: (itens.length == 1) ? get_lang('You have one undone message today:') : get_lang('You have %1 follow ups due for today:', itens.length),
643                        type: 'doneDeadline'
644                    };
645                }else
646                    data.doneDeadline = false;
647        }
648
649        if(data.filtersAlarms){
650
651                alarms = filter_list;
652
653                if(alarms.length > 0){
654                    var itens = [];
655
656                    for(var i=0; i<alarms.length; i++){
657                        alarms[i]['udate'] =  new Date(alarms[i]['udate']*1000).toString('dd/MM HH:mm');
658                        var li_alarm = alarms[i]['udate'] + ' - ' + alarms[i]['from'] + ' - ' + alarms[i]['subject'];
659
660                        itens.push({
661                                'msg_number' : alarms[i]['msg_number'],
662                                'msg_folder' : alarms[i]['msg_folder'],
663                                a            : truncate(html_entities(li_alarm), 34),
664                                id : alarms[i].id
665                        });                             
666                }
667
668                data.filtersAlarms = {
669                                alarms: itens,
670                                title: get_lang('Filter by sender'),
671                                caption: (itens.length == 1) ? get_lang('You have an archived message:') : get_lang('You have %1 messages archived:', itens.length),
672                                type: 'filtersDeadline',
673                                captions: {
674                                    singular:'You have one undone message today:',
675                                    plural:"You have %1 undone messages today:"
[6487]676                                }
[5893]677                        };
[6996]678
679                }else
680                    data.filtersAlarms = false;
[5893]681        }
[6996]682
683        for (var i in data)
684                if(data[i] != false)
685                        showAlarmsModal(data[i]);
686
[6487]687        // controle de qual janela de alarme estará maximizada
688        $('.gray').find('.content-alarm').hide();
689        $('.gray').find('.header-alarm [name="header-icon"]').removeClass('minimize-alarm').addClass('maximize-alarm');
690       
691        if($('.gray').length > 0){
692                if($('.gray').hasClass('filtersDeadline')){
693                        $('.filtersDeadline').find('.content-alarm').show();
694                        $('.filtersDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm');
695                }else if($('.gray').hasClass('alarmDeadline')){
696                        $('.alarmDeadline').find('.content-alarm').show();
697                        $('.alarmDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm');       
698                }else if($('.gray').hasClass('doneDeadline')){
699                        $('.doneDeadline').find('.content-alarm').show();
700                        $('.doneDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm');
701                }
702        }
[6996]703}
704
705function showAlarmsModal(alarm){
[6487]706       
[6996]707        var ok_function = function(event, type, type_cookie){
708                if($(event.target).parents('.'+type).find('[name="stopAlert"]').is(':checked')){
709                        $.cookie(type_cookie, (new Date).toString("dd/MM/yyyy"), {
710                                expires: 1
711                        });
712                }
713        }
714
715        // carrega o template dos alarmes e cria a modal utilizando o plugin freeow
716        var dialogText = DataLayer.render("../prototype/modules/mail/templates/followupflag_alarm_list.ejs", alarm);
717        var titulo = '<div class="header-alarm"><span class="img_title"></span><span class="title-alarm"><strong>'+alarm.title+'</strong></span><span name="header-icon" class="maximize-alarm"></span></div>';
718       
719        $("#freeow").freeow(titulo, dialogText, {
720                classes: ["gray", alarm.type],
721                autoHide: false,
722                startStyle: null,
723                onClick: function(event){
724                        var type = '';
725                        var type_cookie = '';
726                        if($(this).hasClass('alarmDeadline')){
727                                type = 'alarmDeadline';
728                                type_cookie = 'fadeAlarm';
729                        }else if($(this).hasClass('doneDeadline')){
730                                type = 'doneDeadline';
731                                type_cookie = 'fadeCompleted';
732                        }else if($(this).hasClass('filtersDeadline')){
733                                type = 'filtersDeadline';
734                                type_cookie = 'fadeFilterAlarm';
735                        }
736                        if($(event.target).hasClass('stop-alert-alarm')){
737                                return;
738                        }
739                        if($(event.target).hasClass('minimize-alarm')){
740                                $('.'+type).find('.content-alarm').hide();
741                                $(event.target).removeClass('minimize-alarm').addClass('maximize-alarm');
742                                return;
743                        }
744                        if($(event.target).hasClass('maximize-alarm')){
745                                $('.'+type).find('.content-alarm').show();
746                                $(event.target).removeClass('maximize-alarm').addClass('minimize-alarm');
747                                return;
748                        }
[7004]749                        if($(( !!$.browser.safari ) ? event.target.parentElement : event.target).hasClass('confirm-alarm')){
[6996]750                                ok_function(event, type, type_cookie);
751                                $('.'+type).remove();
752                                return;
753                        }
754                        return false;
755                }
756        });
757        // elementos do freeow desnecessários
758        $('.gray .background .content p').remove();
759        $('.gray .icon').remove();
760        $('.gray .close').remove();
761
762        $('div.gray.alarmDeadline .button.delete').button({
763                text: false,
764                icons:{
765                        primary: 'ui-icon-close'
766                }
767        })
768       
769        // botão ok da modal com jquery button
770        $('.content-alarm button').button();
[5884]771}
[6996]772
773function cancelAlarm(element, idAlarm, messageNumber, folderName){
774
775        $(element).parents('li').remove();
776
777        var view = 'div.gray.alarmDeadline';
778        var length = $(view).find('ul.message-list li').length;
779
780        if(length > 0){
781                var msg = '';
782                if(length == 1)
783                        msg = get_lang( 'You have a follow up due for today:');
784                else
785                        msg = get_lang('You have %1 follow ups due for today:', length);
786
787                $(view).find('span.subtitle-alarm strong').html(msg);
788        }else
789                $(view).remove();
790
791        DataLayer.put('followupflagged',
792                {
793                        id: idAlarm ,
794                        isSent: '1',
795                        folderName: folderName,
796                        messageNumber: messageNumber,
797                        uid: User.me.uid
798                });
799
800        DataLayer.commit();
801
802}
803
804alarmDeadline = {
805
806
807        load: function(alarm){
808                var currentDate = new Date().toString("dd/MM/yyyy")
809                if($.cookie("fadeAlarm") != currentDate)
810                        for(var i = 0; i < alarm.length; i++)
811                                this.addAlarm( alarm[i] );
812        },
813
814        addAlarm: function(alarm){
815
816                    DataLayer.task( parseInt(alarm['sentTime']) , function( timestamp ){
817                        var view = 'div.gray.alarmDeadline';
818
819                        if(!$(view+' li.message-item.'+alarm.id).length){
820
821                                var currentDate = new Date().toString("dd/MM/yyyy")
822                                        if($.cookie("fadeAlarm") != currentDate)
823                                       
824                                        if($('div.gray.alarmDeadline').length){
825                                               
826                                                $(view).find('ul.message-list').append(DataLayer.render("../prototype/modules/mail/templates/followupflag_alarmDeadline_add_item_list.ejs", alarm))
827
828                                                var length = $(view).find('ul.message-list li').length;
829                                                var msg = '';
830                                                if(length == 1)
831                                                        msg = get_lang( 'You have a follow up due for today:');
832                                                else
833                                                        msg = get_lang('You have %1 follow ups due for today:', length);
834
835                                                $(view).find('span.subtitle-alarm strong').html(msg);
836
837                                                $(view+' .button.delete').button({
838                                                                text: false,
839                                                                icons:{
840                                                                        primary: 'ui-icon-close'
841                                                                }
842                                                        });
843
844                                        }else{
845                                                var item = {
846                                                                alarms: [alarm],
847                                                                title: get_lang('Follow ups'),
848                                                                caption: get_lang('You have one undone message today:'),
849                                                                type: 'alarmDeadline'
850                                                        };
851                                                        showAlarmsModal(item);
852                                        }
853                                    }
854                               
855                    });
856        }
857
858}
[6487]859               
[5884]860$('#main_table').ready(function(){
[6487]861        handlerMessageFilter = function (data) {
862                alarmFollowupflagged(null, data);
863        }
864        /* Busca  nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */
865        cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter);
[6020]866});
[6487]867
Note: See TracBrowser for help on using the repository browser.