source: sandbox/expressoServiceImap/prototype/modules/attach_message/attach_message.js @ 6486

Revision 6486, 15.5 KB checked in by natan, 12 years ago (diff)

Ticket #2845 - Atualizacao da API na busca de mensagens - Migracao do anexar mensagens para API atual

Line 
1// $.storage = new $.store();
2 
3isOffline = /[A-z0-9-_\/\.]*:offline\?(.*)/;
4breakParams = /[&=]/;
5dots = /\./gi;
6dashes = /\//gi;
7flags = [ 'Attachment', 'Forwarded' ,'Recent', 'Unseen',  'Answered',  'Draft',  'Deleted', 'Flagged', 'Followupflag', 'Label' ];
8months = ['Jan','Feb','Mar','Apr','May','June','July','Aug','Sept','Oct','Nov','Dec'];
9
10var BASE_PATH = '../prototype/';
11//BASE_PATH = '../';
12//encontra os pais de todas as pastas e cria uma nova estrutura adicionando os filhos a um array no atributo 'children' do respectivo pai
13unorphanize = function(root, element) {
14        var ok = false;
15        for (var i=0; i<root.length; i++) {
16                if (root[i].id == element.parentFolder) {
17                        element.children = new Array();
18                        root[i].children.push(element);
19                        return true;
20                } else if (ok = unorphanize(root[i].children, element)) {
21                        break;
22                }
23        }
24
25        return ok;
26}
27
28/* --- helpers --- */
29bytes2Size = function(bytes) {
30        var sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
31        if (bytes == 0) return 'n/a';
32        var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
33        var size = (i<2) ? Math.round((bytes / Math.pow(1024, i))) : Math.round((bytes / Math.pow(1024, i)) * 100)/100;
34        return  size + ' ' + sizes[i];
35}
36
37flags2Class = function(cellvalue, options, rowObject) {
38        var classes = '';       
39        cellvalue = cellvalue.split(',');
40        cell = {
41                        Unseen: parseInt(cellvalue[0])  ? 'Unseen' : 'Seen',
42                        Answered: parseInt(cellvalue[1]) ? 'Answered' : (parseInt(cellvalue[2]) ? 'Forwarded' : ''),
43                        Flagged: parseInt(cellvalue[3]) ? 'Flagged' : '',
44                        Recent: parseInt(cellvalue[4])  ? 'Recent' : '',                       
45                        Draft: parseInt(cellvalue[5]) ? 'Draft' : ''           
46                };
47        for(var flag in cell){
48                classes += '<span class="flags '+ (cell[flag]).toLowerCase() + '"' + (cell[flag] != "" ? 'title="'+ get_lang(cell[flag])+'"' : '')+'> </span>';
49        }
50        if(rowObject.labels){   
51                var titles = [];
52                var count = 0;
53                 for(i in rowObject.labels){
54                        titles[count] = " "+rowObject.labels[i].name;
55                        count++;
56                }
57                titles = titles.join();
58                classes += '<span class="flags labeled" title="'+titles+'"> </span>';
59        }else{
60                classes += '<span class="flags"> </span>';
61        }
62       
63        if(rowObject.followupflagged){         
64                if(rowObject.followupflagged.followupflag.id < 7){
65                        var nameFollowupflag = get_lang(rowObject.followupflagged.followupflag.name);
66                }else{
67                        var nameFollowupflag = rowObject.followupflagged.followupflag.name;
68                }
69                if(rowObject.followupflagged.isDone == 1){
70                        classes += '<span class="flags followupflagged" title="'+nameFollowupflag+'" style="background:'+rowObject.followupflagged.backgroundColor+';"><img style=" margin-left:-3px;" src="../prototype/modules/mail/img/flagChecked.png"></span>';
71                }else{                 
72                        classes += '<span class="flags followupflagged" title="'+nameFollowupflag+'" style="background:'+rowObject.followupflagged.backgroundColor+';"><img src="../prototype/modules/mail/img/flagEditor.png"></span>';
73                }
74               
75        }
76
77        return classes;
78}
79
80NormaliseFrom = function(cellvalue, options, rowObject) {
81        rowObject['flags'] = rowObject['flags'].split(",");
82        if(rowObject['flags'][rowObject['flags'].length-1] ==  1){
83                return get_lang(special_folders["Drafts"]);
84        }
85        return cellvalue;       
86}
87
88NormaliseSubject = function(cellvalue, options, rowObject) {
89        return html_entities(cellvalue);
90}
91
92date2Time = function (timestamp) {
93        date = new Date();
94        if( typeof timestamp === "string" )
95            timestamp = parseInt( timestamp, 10 );
96        dat = new Date(timestamp);
97        if ((date.getTime() - timestamp) < (24*60*60*1000)) {
98                return '<span class="timable" title="'+dat.getTime()+'"></span>';
99        } else {
100                date = new Date(timestamp);
101                if(is_ie){
102                        var b = date.toString().split(' ');
103                        var c = b[2] + "/" + months.indexOf(b[1]) + "/" + b[5];
104                        return '<span class="datable">' + c + '</span>';
105                }else{
106                        var b = date.toISOString().split("T")[0].split("-");
107                        var c = b[2] + "/" + b[1] + "/" + b[0];
108                        return '<span class="datable">' + c + '</span>';
109                }
110        }
111}
112
113changeTabIndex = function (elements) {
114//      jQuery('#foldertree').attr('tabIndex', '1').focus();
115}
116
117selectedMessagesCount = function() {
118        var byte_size = 0, total_messages = 0;
119        for (var folder in selectedMessages) {
120                for (var message in selectedMessages[folder]) {
121                        if (selectedMessages[folder][message]) {
122                                byte_size += parseInt(onceOpenedMessages[folder][message].size);
123                                total_messages++;
124                        }
125                }
126        }
127        $("#selected_messages_number").html(total_messages).next().html(bytes2Size(byte_size));
128        return total_messages;
129}
130
131var msgAttacherGrid = $("#message_attacher_grid"), msgsTotal = $("#selected_messages_number");
132var lastLoadedMessages = [];
133var onceOpenedMessages = [];
134var selectedMessages   = {};
135var selectedFolder     = {};
136
137$mailpreview_tabs_label_length = 15;
138
139/* --- jQuery handlers --- */
140
141jQuery('#buttons-container .button').button();
142
143var firstFolder = jQuery("#foldertree-container")
144.removeClass('empty-container')
145.html(DataLayer.render(BASE_PATH + 'api/templates/foldertree.ejs', 'folder:tree', false, false, true))
146.find("#foldertree").treeview()
147.click(function(event){
148        //request new selected folder messages
149    var target = $(event.target);
150
151    if( target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable, .lastExpandable, .treeview') )
152        return;
153
154    if( !target.attr('id') )
155        target = target.parent();
156
157    if (target.attr('id') == "foldertree") return;
158
159    var targetId = target.attr('id');
160    var child = target.find('.folder');
161
162    $('.filetree span.folder.selected').removeClass('selected');
163    if(!target.is('#foldertree > .expandable, #foldertree > .collapsable'))
164            $(target).children('.folder').addClass('selected');
165
166    selectedFolder = {
167        id: targetId,
168        name: child.attr('title'),
169        'class': child.attr('class')
170    };
171   
172    current_folder = targetId.replace(dashes, '.');
173
174     $("#message_attacher_grid").trigger("reloadGrid")
175        .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>');
176})
177.find('span:first-child');
178$('span.folder.inbox').addClass('selected');
179selectedFolder = {
180    id: firstFolder.parent().attr('id'),
181    name: firstFolder.attr('title'),
182    'class': firstFolder.attr('class')
183};
184
185//jqgrid
186jQuery("#mailgrid-container")
187.removeClass('empty-container')
188.html(DataLayer.render(BASE_PATH + 'api/templates/messagegrid.ejs', {}))
189.find("#message_attacher_grid")
190.jqGrid({
191    url: 'message:jqGrid',
192    datatype: "json",
193    mtype: 'GET',
194    colNames:['#',' ', 'De', 'Assunto', 'Data', 'Tamanho'],
195    colModel:[
196            {name:'msg_number',index:'msg_number', width:45,  sortable:false, hidden:true},
197            {name:'flags',     index:'msg_number', width:100, sortable:false, formatter:flags2Class, edittype: 'image', title :false},
198            {name:'from.name', index:'msg_number', width:70,  sortable:false, formatter:NormaliseFrom},
199            {name:'subject',   index:'subject',    width:245, sortable:false, formatter:NormaliseSubject},
200            {name:'timestamp', index:'timestamp',  width:65,  sortable:false, formatter:date2Time,  align:"center"},
201            {name:'size',      index:'size',       width:55,  sortable:false, formatter:bytes2Size, align:"right"}
202    ],
203    jsonReader : {
204              root:"rows",
205              page: "page",
206              total: "total",
207              records: "records",
208              repeatitems: false,
209              id: "0"
210    },
211    rowNum:10,
212    rowList:[10,25,50],
213    pager: '#message_attacher_grid_pager',
214    sortname: 'id',
215    viewrecords: true,
216    sortorder: "desc",
217    multiselect: true,
218    autowidth: true,
219    loadComplete: function(data) {
220            lastLoadedMessages = data.rows;
221           
222            // aplica o contador
223            jQuery('.timable').each(function (i) {
224                    jQuery(this).countdown({
225                            since: new Date(parseInt(this.title)),
226                            significant: 1,
227                            layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}',
228                            description: ' atr&aacute;s'
229                    });                                 
230            });
231           
232            // reconstrói a seleção das mensagens mesmo depois da mudança de pasta
233            if (selectedMessages[selectedFolder.id]) {
234                    for (var message in selectedMessages[selectedFolder.id]){
235                            for (var j=0; j<data.rows.length; j++){     
236                                    if (selectedMessages[selectedFolder.id][message] && message == data.rows[j].msg_number) {
237                                            jQuery("#message_attacher_grid").setSelection(jQuery("#message_attacher_grid").getDataIDs()[j], false);
238                                    }
239                            }
240                    }
241            }
242            $('#cb_message_attacher_grid').css('display', 'none');
243           
244    },
245    onSelectRow: function (id, selected) {
246            var message = false;
247            for (var i=0; i<lastLoadedMessages.length; i++){
248                    if (lastLoadedMessages[i].msg_number == id) {
249                            message = lastLoadedMessages[i];
250                            break;
251                    }
252            }
253           
254            var tabPanelTemplateId = 'mailpreview_tab_' + selectedFolder.id.replace(/[.\/]/g, '_') + '_' + message.msg_number;
255            var tabPanelTemplateId = tabPanelTemplateId.replace(/[\s\/]/g, '-');
256           
257            if (selected) {     
258                    if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number]) {
259                            if (!selectedMessages[selectedFolder.id])
260                                    selectedMessages[selectedFolder.id] = {};
261                                   
262                            selectedMessages[selectedFolder.id][message.msg_number] = true;
263                            $('#mailpreview-container').unblock();                                             
264
265                            var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject);
266                            if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3)
267                                    tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...';
268                           
269                            if (!$('#' + tabPanelTemplateId).length) {                                                         
270                                    $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel)
271                                    .find('.message.empty-container').hide().end()
272                                    .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body);
273                            } else {
274                                    $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId)
275                                    .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected');
276                            }
277                           
278                    } else {
279                            jQuery('#mailpreview_container').block({ 
280                                    message: '<div id="loading-content"><div class="image"></div></div>', 
281                                    css: { 
282                                            backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)', 
283                                            backgroundRepeat: 'no-repeat',
284                                            backgroundPosition: 'center',
285                                            backgroundColor: 'transparent',
286                                            width: '32px',
287                                            height: '32px',
288                                            border:'none' 
289                                    },
290                                    overlayCSS: { 
291                                            backgroundColor: '#CCC', 
292                                            opacity:         0.5
293                                    } 
294                            });
295                     
296                            if (!selectedMessages[selectedFolder.id])
297                                    selectedMessages[selectedFolder.id] = {};
298                            selectedMessages[selectedFolder.id][message.msg_number] = true;
299                           
300                            var folder = selectedFolder.id.replace(dashes, '.'), mail_preview = null;
301                           
302                            if( !folder.indexOf( 'local_messages/' ) )
303                            {
304                              mail_preview = expresso_local_messages.get_local_mail( id );
305                              mail_preview.eml = expresso_local_messages.get_src( mail_preview.url_export_file );
306                            }
307                            else
308                              mail_preview = DataLayer.get( 'message', { filter: id, criteria: { properties: {context:{folder:folder}} } } );
309
310                              if (!onceOpenedMessages[selectedFolder.id])
311                                      onceOpenedMessages[selectedFolder.id] = {};
312                              onceOpenedMessages[selectedFolder.id][message.msg_number] = jQuery.extend(true, message, mail_preview);
313
314                              $('#mailpreview_container').unblock();
315
316                              var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject);
317                              if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3)
318                                      tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...';
319                              selectedMessagesCount();
320                             
321                              if (!$('#' + tabPanelTemplateId).length) {                                                               
322                                      $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel)
323                                      .find('.message.empty-container').hide().end()
324                                      .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body)
325                                      .prepend(
326                                              '<div class="mailpreview-message-info">' +
327                                                      get_lang('Subject') + ': ' +
328                                                      html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject) +
329                                              '</div>'
330                                      )
331                                      .find('[class^="ExpressoCssWrapper"]').addClass("mailpreview-message-body");
332                              } else {
333                                      $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId)
334                                      .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected');
335                              }
336                    }
337            } else {
338                    /**
339                      * if you wants to remove tab on unselect message,
340                      * but still needs to uselect message on remove tab.
341                      *
342                      */
343                    /*
344                    if ($('#' + tabPanelTemplateId).length) {
345                            $mailpreview_tabs.tabs('remove', '#' + tabPanelTemplateId);
346                    }
347                      */
348                    selectedMessages[selectedFolder.id][message.msg_number] = false;
349                    $mailpreview_tabs.find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').addClass('preview-message-unselected');
350            }
351           
352            if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number])
353                    selectedMessagesCount();
354    },
355    caption: '<span class="'+selectedFolder['class']+'">'+selectedFolder.name+'</span>'
356});
357//.jqGrid('navGrid','#message_attacher_grid_pager',{edit:false,add:false,del:false});
358var title = [get_lang("First page"), get_lang("Prev page"), get_lang("Next page"), get_lang("Last page")];
359$("#first_message_attacher_grid_pager").attr("title",title[0]);
360$("#prev_message_attacher_grid_pager").attr("title",title[1]);
361$("#next_message_attacher_grid_pager").attr("title",title[2]);
362$("#last_message_attacher_grid_pager").attr("title",title[3]);
363
364var $mailpreview_tabs = $( "#mailpreview_container").tabs({
365        tabTemplate: "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close'> Fechar </span></li>",
366        panelTemplate: '<div class="message mailpreview-message"></div>',
367        add: function( event, ui ) {
368                $mailpreview_tabs.tabs('select', '#' + ui.panel.id);
369       
370                if ($('#mailpreview_tabs_default_empty').length && $mailpreview_tabs.tabs("length") > 1) {     
371                        $mailpreview_tabs.tabs('remove', '#mailpreview_tabs_default_empty');
372                }
373        },
374        remove: function(event, ui) {
375                if (!$mailpreview_tabs.tabs("length") && !$('#mailpreview_tabs_default_empty').length) {
376                        /**
377                         * TODO: internacionalizar a string 'Nenhuma aba'
378                         */
379                        $mailpreview_tabs.tabs('add', '#mailpreview_tabs_default_empty', 'Nenhuma aba')
380                        .find('#mailpreview_tabs_default_empty').removeClass('mailpreview-message').addClass('empty-container')
381                        .html('<span class="message">' + get_lang('select a message to preview') + '</span>').end()
382                        .find('.ui-tabs-nav li:first .ui-icon-close').remove();
383                }
384        }
385});
386
387$( "#mailpreview_container span.ui-icon-close" ).unbind("click");
388$( "#mailpreview_container span.ui-icon-close" ).live( "click", function(e) {
389        var index = $("li", $mailpreview_tabs).index($(this).parent());
390        $mailpreview_tabs.tabs("remove", index);
391        e.stopImmediatePropagation();
392});
393
394if (!$mailpreview_tabs.tabs("length") && !$('#mailpreview_tabs_default_empty').length) {
395                        /**
396                         * TODO: internacionalizar a string 'Nenhuma aba'
397                         */
398                        $mailpreview_tabs.tabs('add', '#mailpreview_tabs_default_empty', 'Nenhuma aba')
399                        .find('#mailpreview_tabs_default_empty').removeClass('mailpreview-message').addClass('empty-container')
400                        .html('<span class="message">' + get_lang('select a message to preview') + '</span>').end()
401                        .find('.ui-tabs-nav li:first .ui-icon-close').remove();
402}
Note: See TracBrowser for help on using the repository browser.