source: sandbox/2.4.1-1/prototype/modules/mail/js/followupflag.js @ 6296

Revision 6296, 26.5 KB checked in by marcieli, 12 years ago (diff)

Ticket #2764 - Internacionalização, alinhamento botão ok e alerta de filtro duplicado

  • Property svn:executable set to *
Line 
1function updateCacheFollowupflag(msgNumber, msgFolder, op){
2        if(op){
3                if(typeof msgNumber == 'object'){
4                        var extend = DataLayer.get('followupflagged', {
5                                filter: ['AND', ['IN', 'messageNumber', msgNumber], ['IN', 'folderName', msgFolder]],
6                                criteria: {deepness: 1}
7                        }, true);
8                } else{
9                        var extend = DataLayer.get('followupflagged', {
10                                filter: ['AND', ['=', 'messageNumber', msgNumber], ['=', 'folderName', msgFolder]],
11                                criteria: {deepness: 1}
12                        }, true);
13                }
14
15               
16                if(extend != "" || extend != 'undefined' || extend != []){
17                        for(var i = 0; i < extend.length; i++){
18                                if(onceOpenedHeadersMessages[extend[i].folderName]){
19                                        if(onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]){
20                                                onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]['followupflagged'] = {};
21                                                DataLayer.merge(onceOpenedHeadersMessages[extend[i].folderName][extend[i].messageNumber]['followupflagged'], extend[i]);
22                                        }
23                                }
24
25                        }
26                }
27        }else{
28                onceOpenedHeadersMessages[msgFolder][msgNumber]['followupflagged'] = undefined;
29        }
30}
31
32function init_followup(data){
33
34        winElement = data.window;
35        selectedMessageIds = data.selectedMessages;
36        folder = current_folder;
37
38        /**
39         * Implementação do widget de input-combobox
40         */
41 
42        (function( $ ) {
43                $.widget( "ui.combobox", {
44                        _create: function() {
45                                var self = this,
46                                        select = this.element.hide(),
47                                        selected = select.children( ":selected" ),
48                                        value = selected.val() ? selected.text() : "";
49                                var input = this.input = $( "<input>" )
50                                        .insertAfter( select )
51                                        .val( value )
52                                        .autocomplete({
53                                                delay: 0,
54                                                minLength: 0,
55                                                source: function( request, response ) {
56                                                        var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
57                                                        response( select.children( "option" ).map(function() {
58                                                                var text = $( this ).text();
59                                                                if ( this.value && ( !request.term || matcher.test(text) ) )
60                                                                        return {
61                                                                                label: text.replace(
62                                                                                        new RegExp(
63                                                                                                "(?![^&;]+;)(?!<[^<>]*)(" +
64                                                                                                $.ui.autocomplete.escapeRegex(request.term) +
65                                                                                                ")(?![^<>]*>)(?![^&;]+;)", "gi"
66                                                                                        ), "<strong>$1</strong>" ),
67                                                                                value: text,
68                                                                                option: this
69                                                                        };
70                                                        }) );
71                                                },
72                                                select: function( event, ui ) {
73                                                        ui.item.option.selected = true;
74                                                        self._trigger( "selected", event, {
75                                                                item: ui.item.option
76                                                        });
77                                                },
78                                                change: function( event, ui ) {
79                                                        if ( !ui.item ) {
80                                                                var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" ),
81                                                                        valid = false;
82                                                                select.children( "option" ).each(function() {
83                                                                        if ( $( this ).text().match( matcher ) ) {
84                                                                                this.selected = valid = true;
85                                                                                return false;
86                                                                        }
87                                                                });
88                                                                /*
89                                                                if ( !valid ) {
90                                                                        // remove invalid value, as it didn't match anything
91                                                                        $( this ).val( "" );
92                                                                        select.val( "" );
93                                                                        input.data( "autocomplete" ).term = "";
94                                                                        return false;
95                                                                }
96                                                                */
97                                                                if ( !valid ) {
98                                                                        if(select.has('option[value="custom"]').length > 0) {
99                                                                                select.find('option:last').val('custom').html($(this).val()).attr('selected', 'selected');
100                                                                        } else {
101                                                                                select.append(select.find('option:last').clone().val('custom').html($(this).val()));
102                                                                                select.find('option[value="custom"]').attr('selected', 'selected');
103                                                                        }
104                                                                }
105                                                        }
106                                                }
107                                        })
108                                        .addClass( "ui-widget ui-widget-content ui-corner-left" );
109
110                                input.data( "autocomplete" )._renderItem = function( ul, item ) {
111                                        return $( "<li></li>" )
112                                                .data( "item.autocomplete", item )
113                                                .append( "<a>" + item.label + "</a>" )
114                                                .appendTo( ul );
115                                };
116
117                                this.button = $( "<button type='button'>&nbsp;</button>" )
118                                        .attr( "tabIndex", -1 )
119                                        .attr( "title", "Show All Items" )
120                                        .insertAfter( input )
121                                        .button({
122                                                icons: {
123                                                        primary: "ui-icon-triangle-1-s"
124                                                },
125                                                text: false
126                                        })
127                                        .removeClass( "ui-corner-all" )
128                                        .addClass( "ui-corner-right ui-button-icon" )
129                                        .click(function() {
130                                                // close if already visible
131                                                if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
132                                                        input.autocomplete( "close" );
133                                                        return;
134                                                }
135
136                                                // work around a bug (likely same cause as #5265)
137                                                $( this ).blur();
138
139                                                // pass empty string as value to search for, displaying all results
140                                                input.autocomplete( "search", "" );
141                                                input.focus();
142                                        });
143                        },
144
145                        destroy: function() {
146                                this.input.remove();
147                                this.button.remove();
148                                this.element.show();
149                                $.Widget.prototype.destroy.call( this );
150                        }
151                });
152        })( jQuery );
153        /**
154         * #END: Implementação do widget de input-combobox
155         */
156
157        winElement.find('.button').button()
158        .filter('.menu-configure-followupflag .cancel').click(function(){
159                winElement.dialog("close");
160        }).end()
161       
162        .filter('.menu-configure-followupflag .save').click(function(){
163        var saveFollowupflagged = function(){
164                var idFollowupflagged = winElement.find('[name="followupflagId"]').val();
165                        idFollowupflagged = idFollowupflagged.split(',');
166                        for(x=0; x<idFollowupflagged.length; x++){
167                                (idFollowupflagged[x] == "false") ? idFollowupflagged[x] = false : idFollowupflagged;
168                        }
169                for(i=0; i<selectedMessageIds.length; i++){
170                                var isDone = winElement.find('[name="done"]').is(':checked') ? 1 : 0;
171                                var alarmDate = false;
172                                var doneDate  = false;
173                                var folder_name;
174                                var folders = [];
175                                var messages = [];
176                                var roles = get_selected_messages_search_role().split(',');
177                                for (var i=0; i < selectedMessageIds.length; i++ ){
178                                        if (currentTab == 0) {
179                                                folder_name = current_folder;
180                                                var messageNumber = selectedMessageIds[i];
181                                        }else{
182                                                var tr = $('[role="'+roles[i]+'"]');
183                                                folder_name = $(tr).attr('name');
184                                                var id = $(tr).attr('id');
185                                                var messageNumber = id.replace(/_[a-zA-Z0-9]+/,"");
186                                        }
187                                        folders.push(folder_name);
188                                       
189                                                var followupflagged = DataLayer.merge({
190                                                        uid : User.me.id,
191                                                        followupflagId : followupflagId,
192                                                        folderName : folder_name,
193                                                        messageNumber : messageNumber,
194                                                        isDone: isDone,
195                                                        backgroundColor : backgroundColor
196                                                }, !!idFollowupflagged[i] ? {id: idFollowupflagged[i]} : {});
197                                       
198                                        if (alarmDate = winElement.find('[name="alarmDate"]').datepicker("getDate")) {
199                                                if (alarmTime = winElement.find('[name="alarmTime"]').datepicker("getDate")) {
200                                                        alarmDate.set({hour:alarmTime.getHours(), minute:alarmTime.getMinutes()});
201                                                }
202                                                followupflagged.alarmDeadline = alarmDate.toString('yyyy-MM-dd HH:mm:ss');
203                                        }
204
205                                        if (doneDate = winElement.find('[name="doneDate"]').datepicker("getDate")) {
206                                                if (doneTime = winElement.find('[name="doneTime"]').datepicker("getDate")) {
207                                                        doneDate.set({hour:doneTime.getHours(), minute:doneTime.getMinutes()});
208                                                }
209                                                followupflagged.doneDeadline = doneDate.toString('yyyy-MM-dd HH:mm:ss');
210                                        }
211                                       
212                                        /**
213                                         * Aplica o ícone correspondente na lista de mensagens do expressoMail
214                                         */
215                                        if(current_folder == folder_name){
216                                                var flagged = $('#td_message_followup_' + messageNumber + ', tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).find(".flag-edited");
217                                        } else{
218                                                var flagged = $('tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).find(".flag-edited");
219                                        }
220                                        if(isDone){
221                                                flagged.find("img").attr("src", "../prototype/modules/mail/img/flagChecked.png").css("margin-left","-3px");
222                                        }else{
223                                                flagged.find("img").attr("src", "../prototype/modules/mail/img/flagEditor.png").css("margin-left","0");                 
224                                        }
225                                       
226                                        var followupflagName = winElement.find('[name="name"] option:selected').text();
227                                        if(current_folder == folder_name){
228                                                $('#td_message_followup_' + messageNumber + ', ' +
229                                                'tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).attr('title', followupflagName).find(".flag-edited").css("background", backgroundColor);
230                                        }else{
231                                                $('tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).attr('title', followupflagName).find(".flag-edited").css("background", backgroundColor);
232                                        } 
233                                        /**
234                                         * Salva ou, caso já exista, atualiza
235                                         */
236                                        DataLayer.put('followupflagged', followupflagged);
237                                }
238                               
239                                DataLayer.commit(false, false, function(data){
240                                        winElement.find('.menu-configure-followupflag .delete').button("option", "disabled", false);
241                                        updateCacheFollowupflag(selectedMessageIds, folders, true);
242                                        winElement.dialog("close");
243                                        alarmFollowupflagged('followupflagAlarms');
244                                });
245                                winElement.find('.menu-configure-followupflag .save').button("option", "disabled", true);
246                               
247               
248                }
249    }
250                var backgroundColor = winElement.find('[name="backgroundColor"]').val();
251                var followupflagId  = winElement.find('[name="name"] option:selected').val();
252                if (followupflagId == 'custom') {
253                        DataLayer.put('followupflag', {name:winElement.find('[name="name"] option:selected').text(), uid:User.me.id});
254                        DataLayer.commit(false, false, function(data){
255                                $.each(data, function(index, value) {
256                                        if(typeof value == 'object'){
257                                                followupflagId = value.id;
258                                        }
259                                });
260                                winElement.find('[name="name"] option[value="custom"]').val(followupflagId);
261                                saveFollowupflagged();
262                        });
263                }else{
264                        saveFollowupflagged();
265                }       
266
267        }).end()
268       
269        .filter('.menu-configure-followupflag .delete').click(function(){
270                if (selectedMessageIds.length == 0) $(this).button("option", "disabled", true);
271                /** TODO Mudar quando melhorias forem implementadas na API de atualização do cache */
272                DataLayer.remove('followupflagged', false);
273                DataLayer.get('followupflagged');
274                var roles = get_selected_messages_search_role().split(',');
275                for (var i=0; i < selectedMessageIds.length; i++ ){
276                                if (currentTab == 0) {
277                                        folder_name = current_folder;
278                                        var messageNumber = selectedMessageIds[i];
279                                }else{
280                                        var tr = $('[role="'+roles[i]+'"]');
281                                        folder_name = $(tr).attr('name');
282                                        var id = $(tr).attr('id');
283                                        var messageNumber = id.replace(/_[a-zA-Z0-9]+/,"");
284                                }                               
285                               
286                        if(onceOpenedHeadersMessages[folder_name][messageNumber]['followupflagged']){
287                                if(onceOpenedHeadersMessages[folder_name][messageNumber]['followupflagged'].id){
288                                        var flag_id = onceOpenedHeadersMessages[folder_name][messageNumber]['followupflagged'].id;
289                                        DataLayer.remove('followupflagged', flag_id );
290                                        /**
291                                         * TODO - corrigir o formato do ID no DataLayer, para que seja utilizado o ID composto
292                                         * ao invés do ID do PostgreSQL atualmente em uso.
293                                         */
294                                         
295                                        /**
296                                         * # hack necessário enquanto o DataLayer não reconhece o ID composto. Trocar o
297                                         * código abaixo pela chamada trivial de DataLayer.remove('followupflagged', idCompost)
298                                         */
299                                        // var data = {};
300                                        // data[ 'followupflagged://' + folder_name + '/' + messageNumber + '#' + flag_id ] = false;
301                                        // DataLayer.dispatch('Sync', data, false, true);
302                                       
303                                        if(current_folder == folder_name){
304                                                $('#td_message_followup_' + messageNumber + ', ' +
305                                                  'tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).attr('title', '').find(".flag-edited").css("background", '#CCC');
306                                                $('#td_message_followup_' + messageNumber + ', ' +
307                                                        'tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).find(".flag-edited")
308                                                        .find("img").attr("src", "../prototype/modules/mail/img/flagEditor.png").css("margin-left","0");
309                                        }else{
310                                                $('tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).attr('title', '').find(".flag-edited").css("background", '#CCC');
311                                                $('tr[role="'+messageNumber+'_'+folder_name+'"] #td_message_followup_search_' + messageNumber).find(".flag-edited")
312                                                        .find("img").attr("src", "../prototype/modules/mail/img/flagEditor.png").css("margin-left","0");
313                                        }
314                                        updateCacheFollowupflag(messageNumber, folder_name, false);
315                                }
316                        }
317                }
318                DataLayer.commit(false, false, function(){
319                        winElement.dialog("close");
320                        alarmFollowupflagged('followupflagAlarms');
321                });
322               
323        });
324       
325        /**
326         * Se houver mudança, habilita o botão "Save"
327         */
328        winElement.find(':input').change(function(event){
329                if (event.keyCode != '27' && event.keyCode != '13')
330                        winElement.find('.menu-configure-followupflag .save').button("option", "disabled", false);
331        }).keydown(function(event){
332                if (event.keyCode != '27' && event.keyCode != '13')
333                        winElement.find('.menu-configure-followupflag .save').button("option", "disabled", false);
334        });
335       
336        winElement.find('.date').datepicker();
337        winElement.find('.time').timepicker({});
338        winElement.find('[name="name"]').combobox()
339        //pega o botão criado
340        .next().next().click(function (event, ui){     
341                $(".ui-autocomplete.ui-menu li").css("position","relative");
342                $(".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){
343                        var id = $('.followupflag-configure').find('option')[$(this).parents('li').index()].value;
344                        var nameFollowupflag = $('.followupflag-configure').find('option')[$(this).parents('li').index()].text;
345                        var removeLi = $(this).parents("li");           
346                       
347                        $.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?'), {
348                                'type':     'question',
349                                'custom_class': (is_ie ? 'configure-zebra-dialog' : ''),
350                                'title':    'Atenção',
351                                'buttons': ['Sim','Não'],               
352                                'overlay_opacity': '0.5',
353                                'onClose':  function(caption) {
354                                        if(caption == 'Sim'){
355                                                var listFollowupflag = DataLayer.get('followupflagged', ['=', 'followupflagId', id]);
356                                                for (var i=0; i < listFollowupflag.length; i++)
357                                                        DataLayer.remove('followupflagged', listFollowupflag[i].id);
358
359                                                DataLayer.remove('followupflag',false);                                 
360                                                DataLayer.get('followupflag');
361
362                                                DataLayer.remove('followupflag', ''+id);                                               
363                                                DataLayer.commit(false, false, function(data){
364                                                        $('[title="'+nameFollowupflag+'"]').attr('title', '').find('div').css({backgroundColor:'#CCC'});
365                                                        $(removeLi).remove();
366                                                        $('option[value="'+ id +'"]').remove();
367                                                        $('.ui-autocomplete.ui-menu li:first');
368                                                        $('.followupflag-configure').find('option:first').attr("selected","selected");                                                 
369                                                        $('.ui-autocomplete-input').val($('.followupflag-configure').find('option:selected').text());
370                                                       
371                                                        for(var i=0; i<listFollowupflag.length; i++){
372                                                                if(listFollowupflag[i].id == winElement.find('[name="followupflagId"]').val()){
373                                                                        winElement.find('[name="followupflagId"]').val("");
374                                                                }
375                                                        }                                               
376                                                });                     
377                                                event.stopImmediatePropagation();
378                                        }
379                                }
380                        });     
381                        if(is_ie)
382                                $(".ZebraDialogOverlay").css("z-index","1006");
383                });
384
385        });
386        winElement.find('.ui-corner-right.ui-button-icon').attr('title', get_lang('Show All Items'));
387
388        winElement.find('[name="alarmDate"],[name="alarmTime"]').attr("disabled","disabled");
389       
390        winElement.find('[name="alarm"]').click(function(){
391                if($(this).is(":checked")){
392                        winElement.find('[name="alarmDate"],[name="alarmTime"]').removeAttr("disabled");                       
393                }else{
394                        winElement.find('[name="alarmDate"],[name="alarmTime"]').attr("disabled","disabled");
395                }
396        });
397        if(winElement.find('[name="alarm"]').is(":checked")){
398                winElement.find('[name="alarmDate"],[name="alarmTime"]').removeAttr("disabled");
399        }
400        winElement.find('[name="done"]').click(function(){
401                if($(this).is(":checked")){
402                        winElement.find(".input-done input").attr("disabled","disabled");
403                }else{
404                        winElement.find(".input-done input").removeAttr("disabled");
405                }
406        });
407
408
409        winElement.find(".followupflag-color-fields").hide();
410        winElement.find(".followupflag-color.sample-list .sample-item").click(function(){
411                winElement.find('.menu-configure-followupflag .save').button("enable");
412                winElement.find(".followupflag-color.sample-list .sample-item").removeClass("selected");
413                $(this).addClass("selected");
414                var color = $(this).attr('alt');
415                winElement.find('[name="backgroundColor"]').css('background-color', color).val(color)
416        });
417       
418        winElement.find(".followupflag-color.sample-list .sample-item.selected").trigger('click');
419                               
420        winElement.find('[name="setColor"]').change(function(){
421                if(winElement.find('[name="setColor"]').val() == "default"){
422                        winElement.find(".followupflag-color.sample-list").show("fast");
423                        winElement.find(".followupflag-color-fields").hide();
424                        winElement.find(".followupflag-color.sample-list .sample-item.selected").trigger('click');
425                } else if(winElement.find('[name="setColor"]').val() == "custom"){     
426                        winElement.find(".followupflag-color-fields").show("fast");
427                        winElement.find(".followupflag-color.sample-list").hide();
428                        winElement.find(".colorwell").focus();
429                }               
430        });
431       
432        if(winElement.find('[name="setColor"] option:selected').val() == "custom"){
433                winElement.find('[name="setColor"]').trigger("change");
434        }
435
436        var colorpickerPreviewChange = function(color) {
437                winElement.find('.menu-configure-followupflag .save').button("enable");
438                winElement.find('.colorwell-selected').val(color).css('background-color', color);
439                winElement.find('.flag-color-preview').css('background',color);
440        }
441
442        var f = $.farbtastic(winElement.find('.colorpicker'), colorpickerPreviewChange);
443        var selected;                                   
444        winElement.find('.colorwell').each(function () {
445                f.linkTo(this);
446        }).focus(function() {
447                if (selected) {
448                        $(selected).removeClass('colorwell-selected');
449                }
450                $(selected = this).addClass('colorwell-selected');
451                f.linkTo(this, colorpickerPreviewChange);
452                f.linkTo(colorpickerPreviewChange);
453               
454        });
455        if(winElement.find('[name="setColor"] option:selected').val() == "custom"){
456                winElement.find(".colorwell").focus();
457        }
458
459}
460
461
462/**
463 * constrói as três possíveis janelas 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)
468 */
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: get_lang('Done'),
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: get_lang('Follow ups'),
491                                        enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy"))
492                                }
493                        ];
494                        break;
495                // carregar modal de filtros
496                case 'filtersAlarms':
497                        $('.filtersDeadline').remove();
498                        var toIterate = [
499                                {
500                                        attrDeadline: 'filtersDeadline',
501                                        caption: {
502                                                singular:'You have an archived message:',
503                                                plural:'You have %1 messages archived:'
504                                        },
505                                        title: get_lang('Filter by sender'),
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:'You have an archived message:',
518                                                plural:'You have %1 messages archived:'
519                                        },
520                                        title: get_lang('Filter by sender'),
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: get_lang('Done'),
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: get_lang('Follow ups'),
538                                        enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy"))
539                                }
540                        ];
541                        break;
542        }
543        var i = 0;
544        // recupera e monta os dados para serem exibidos nas modais de alarmes
545        while (it = toIterate.pop()){
546                if (!it.enable) continue;
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                               
611                if(alarmInRange.length > 0){
612                        // monta o subtitulo da modal
613                        var caption = (alarmInRange.length == 1) ?
614                                get_lang(it.caption.singular):
615                                get_lang(it.caption.plural, alarmInRange.length);
616                        // monta o array de dados a ser passado para o template
617                        var data = {
618                                alarmInRange : messages_alarm,
619                                caption: caption,
620                        };
621                        // tipo de modal a ser exibida
622                        var type_alarm = it.attrDeadline;
623                        //função chamada ao clicar no botão Ok da modal
624                        var ok_function = function(event, type, type_cookie){
625                                if($(event.target).parents('.'+type).find('[name="stopAlert"]').is(':checked')){
626                                        $.cookie(type_cookie, (new Date).toString("dd/MM/yyyy"), {
627                                                expires: 1
628                                        });
629                                }
630                        }
631                        // carrega o template dos alarmes e cria a modal utilizando o plugin freeow
632                        var dialogText = DataLayer.render("../prototype/modules/mail/templates/followupflag_alarm_list.ejs", data);
633                        var titulo = '<div class="header-alarm"><span class="title-alarm"><strong>'+it.title+'</strong></span><span name="header-icon" class="maximize-alarm"></span></div>'
634                        $("#freeow").freeow(titulo, dialogText, {
635                                classes: ["gray", type_alarm],
636                                autoHide: false,
637                                startStyle: null,
638                                onClick: function(event){
639                                        var type = '';
640                                        var type_cookie = '';
641                                        if($(this).hasClass('alarmDeadline')){
642                                                type = 'alarmDeadline';
643                                                type_cookie = 'fadeAlarm';
644                                        }else if($(this).hasClass('doneDeadline')){
645                                                type = 'doneDeadline';
646                                                type_cookie = 'fadeCompleted';
647                                        }else if($(this).hasClass('filtersDeadline')){
648                                                type = 'filtersDeadline';
649                                                type_cookie = 'fadeFilterAlarm';
650                                        }
651                                        if($(event.target).hasClass('stop-alert-alarm')){
652                                                return;
653                                        }
654                                        if($(event.target).hasClass('minimize-alarm')){
655                                                $('.'+type).find('.content-alarm').hide();
656                                                $(event.target).removeClass('minimize-alarm');
657                                                $(event.target).addClass('maximize-alarm');
658                                                return;
659                                        }
660                                        if($(event.target).hasClass('maximize-alarm')){
661                                                $('.'+type).find('.content-alarm').show();
662                                                $(event.target).removeClass('maximize-alarm');
663                                                $(event.target).addClass('minimize-alarm');
664                                                return;
665                                        }
666                                        if($(event.target).hasClass('confirm-alarm')){
667                                                ok_function(event, type, type_cookie);
668                                                $('.'+type).remove();
669                                                return;
670                                        }
671                                        return false;
672                                }
673                        });
674                        // elementos do freeow desnecessários
675                        $('.gray .background .content p').remove();
676                        $('.gray .icon').remove();
677                        $('.gray .close').remove();
678                       
679                        // botão ok da modal com jquery button
680                        $('.content-alarm button').button();
681                }               
682        }
683       
684        // controle de qual janela de alarme estará maximizada
685        $('.gray').find('.content-alarm').hide();
686        if($('.gray').length > 0){
687                if($('.gray').hasClass('filtersDeadline')){
688                        $('.filtersDeadline').find('.content-alarm').show();
689                        $('.filtersDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm');
690                        $('.filtersDeadline .header-alarm [name="header-icon"]').addClass('minimize-alarm');
691                }else if($('.gray').hasClass('alarmDeadline')){
692                        $('.alarmDeadline').find('.content-alarm').show();
693                        $('.alarmDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm');
694                        $('.alarmDeadline .header-alarm [name="header-icon"]').addClass('minimize-alarm');             
695                }else if($('.gray').hasClass('doneDeadline')){
696                        $('.doneDeadline').find('.content-alarm').show();
697                        $('.doneDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm');
698                        $('.doneDeadline .header-alarm [name="header-icon"]').addClass('minimize-alarm');                       
699                }
700        }
701       
702}
703               
704$('#main_table').ready(function(){
705        handlerMessageFilter = function (data) {
706                alarmFollowupflagged(null, data);
707        }
708        /* Busca  nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */
709        cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter);
710});
Note: See TracBrowser for help on using the repository browser.