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

Revision 6545, 11.3 KB checked in by natan, 12 years ago (diff)

Ticket #2845 - Atualizacao da API na busca de mensagens - Correcao do problema nas paginacoes

Line 
1var BASE_PATH = '../prototype/';
2
3var msgAttacherGrid = $("#message_attacher_grid"), msgsTotal = $("#selected_messages_number");
4var lastLoadedMessages = [];
5var onceOpenedMessages = [];
6var selectedMessages   = {};
7var selectedFolder     = {};
8
9$mailpreview_tabs_label_length = 15;
10
11/* --- jQuery handlers --- */
12
13jQuery('#buttons-container .button').button();
14
15var firstFolder = jQuery("#foldertree-container")
16.removeClass('empty-container')
17.html(DataLayer.render(BASE_PATH + 'api/templates/foldertree.ejs', 'folder:tree', false, false, true))
18.find("#foldertree").treeview()
19.click(function(event){
20        //request new selected folder messages
21    var target = $(event.target);
22
23    if( target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable, .lastExpandable, .treeview') )
24        return;
25
26    if( !target.attr('id') )
27        target = target.parent();
28
29    if (target.attr('id') == "foldertree") return;
30
31    var targetId = target.attr('id');
32    var child = target.find('.folder');
33
34    $('.filetree span.folder.selected').removeClass('selected');
35    if(!target.is('#foldertree > .expandable, #foldertree > .collapsable'))
36            $(target).children('.folder').addClass('selected');
37
38    selectedFolder = {
39        id: targetId,
40        name: child.attr('title'),
41        'class': child.attr('class')
42    };
43   
44    current_folder = targetId.replace(dashes, '.');
45    current_count = DataLayer.get( 'message', { criteria: { count: true, properties: {context:{folder:current_folder}} } }, true );
46
47     $("#message_attacher_grid").trigger("reloadGrid")
48        .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>');
49})
50.find('span:first-child');
51$('span.folder.inbox').addClass('selected');
52selectedFolder = {
53    id: firstFolder.parent().attr('id'),
54    name: firstFolder.attr('title'),
55    'class': firstFolder.attr('class')
56};
57
58//jqgrid
59jQuery("#mailgrid-container")
60.removeClass('empty-container')
61.html(DataLayer.render(BASE_PATH + 'api/templates/messagegrid.ejs', {}))
62.find("#message_attacher_grid")
63.jqGrid({
64    url: 'message:jqGrid',
65    datatype: "json",
66    mtype: 'GET',
67    colNames:['#',' ', 'De', 'Assunto', 'Data', 'Tamanho'],
68    colModel:[
69            {name:'msg_number',index:'msg_number', width:45,  sortable:false, hidden:true},
70            {name:'flags',     index:'msg_number', width:100, sortable:false, formatter:flags2Class, edittype: 'image', title :false},
71            {name:'from.name', index:'msg_number', width:70,  sortable:false, formatter:NormaliseFrom},
72            {name:'subject',   index:'subject',    width:245, sortable:false, formatter:NormaliseSubject},
73            {name:'timestamp', index:'timestamp',  width:65,  sortable:false, formatter:date2Time,   align:"center"},
74            {name:'size',      index:'size',       width:55,  sortable:false, formatter:bytes2Size,  align:"right"}
75    ],
76    jsonReader : {
77              root:"rows",
78              page: "page",
79              total: "total",
80              records: "records",
81              repeatitems: false,
82              id: "0"
83    },
84    rowNum:10,
85    rowList:[10,25,50],
86    pager: '#message_attacher_grid_pager',
87    sortname: 'id',
88    viewrecords: true,
89    sortorder: "desc",
90    multiselect: true,
91    autowidth: true,
92    loadComplete: function(data) {
93            lastLoadedMessages = data.rows;
94           
95            // aplica o contador
96            jQuery('.timable').each(function (i) {
97                    jQuery(this).countdown({
98                            since: new Date(parseInt(this.title)),
99                            significant: 1,
100                            layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}',
101                            description: ' atr&aacute;s'
102                    });                                 
103            });
104           
105            // reconstrói a seleção das mensagens mesmo depois da mudança de pasta
106            if (selectedMessages[selectedFolder.id]) {
107                    for (var message in selectedMessages[selectedFolder.id]){
108                            for (var j=0; j<data.rows.length; j++){     
109                                    if (selectedMessages[selectedFolder.id][message] && message == data.rows[j].msg_number) {
110                                            jQuery("#message_attacher_grid").setSelection(jQuery("#message_attacher_grid").getDataIDs()[j], false);
111                                    }
112                            }
113                    }
114            }
115            $('#cb_message_attacher_grid').css('display', 'none');
116           
117    },
118    onSelectRow: function (id, selected) {
119            var message = false;
120            for (var i=0; i<lastLoadedMessages.length; i++){
121                    if (lastLoadedMessages[i].msg_number == id) {
122                            message = lastLoadedMessages[i];
123                            break;
124                    }
125            }
126           
127            var tabPanelTemplateId = 'mailpreview_tab_' + selectedFolder.id.replace(/[.\/]/g, '_') + '_' + message.msg_number;
128            var tabPanelTemplateId = tabPanelTemplateId.replace(/[\s\/]/g, '-');
129           
130            if (selected) {     
131                    if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number]) {
132                            if (!selectedMessages[selectedFolder.id])
133                                    selectedMessages[selectedFolder.id] = {};
134                                   
135                            selectedMessages[selectedFolder.id][message.msg_number] = true;
136                            $('#mailpreview-container').unblock();                                             
137
138                            var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject);
139                            if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3)
140                                    tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...';
141                           
142                            if (!$('#' + tabPanelTemplateId).length) {                                                         
143                                    $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel)
144                                    .find('.message.empty-container').hide().end()
145                                    .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body);
146                            } else {
147                                    $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId)
148                                    .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected');
149                            }
150                           
151                    } else {
152                            jQuery('#mailpreview_container').block({ 
153                                    message: '<div id="loading-content"><div class="image"></div></div>', 
154                                    css: { 
155                                            backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)', 
156                                            backgroundRepeat: 'no-repeat',
157                                            backgroundPosition: 'center',
158                                            backgroundColor: 'transparent',
159                                            width: '32px',
160                                            height: '32px',
161                                            border:'none' 
162                                    },
163                                    overlayCSS: { 
164                                            backgroundColor: '#CCC', 
165                                            opacity:         0.5
166                                    } 
167                            });
168                     
169                            if (!selectedMessages[selectedFolder.id])
170                                    selectedMessages[selectedFolder.id] = {};
171                            selectedMessages[selectedFolder.id][message.msg_number] = true;
172                           
173                            var folder = selectedFolder.id.replace(dashes, '.'), mail_preview = null;
174                           
175                            if( !folder.indexOf( 'local_messages/' ) )
176                            {
177                              mail_preview = expresso_local_messages.get_local_mail( id );
178                              mail_preview.eml = expresso_local_messages.get_src( mail_preview.url_export_file );
179                            }
180                            else
181                              mail_preview = DataLayer.get( 'message', { filter: id, criteria: { properties: {context:{folder:folder}} } } );
182
183                              if (!onceOpenedMessages[selectedFolder.id])
184                                      onceOpenedMessages[selectedFolder.id] = {};
185                              onceOpenedMessages[selectedFolder.id][message.msg_number] = jQuery.extend(true, message, mail_preview);
186
187                              $('#mailpreview_container').unblock();
188
189                              var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject);
190                              if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3)
191                                      tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...';
192                              selectedMessagesCount();
193                             
194                              if (!$('#' + tabPanelTemplateId).length) {                                                               
195                                      $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel)
196                                      .find('.message.empty-container').hide().end()
197                                      .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body)
198                                      .prepend(
199                                              '<div class="mailpreview-message-info">' +
200                                                      get_lang('Subject') + ': ' +
201                                                      html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject) +
202                                              '</div>'
203                                      )
204                                      .find('[class^="ExpressoCssWrapper"]').addClass("mailpreview-message-body");
205                              } else {
206                                      $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId)
207                                      .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected');
208                              }
209                    }
210            } else {
211                    /**
212                      * if you wants to remove tab on unselect message,
213                      * but still needs to uselect message on remove tab.
214                      *
215                      */
216                    /*
217                    if ($('#' + tabPanelTemplateId).length) {
218                            $mailpreview_tabs.tabs('remove', '#' + tabPanelTemplateId);
219                    }
220                      */
221                    selectedMessages[selectedFolder.id][message.msg_number] = false;
222                    $mailpreview_tabs.find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').addClass('preview-message-unselected');
223            }
224           
225            if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number])
226                    selectedMessagesCount();
227    },
228    caption: '<span class="'+selectedFolder['class']+'">'+selectedFolder.name+'</span>'
229});
230//.jqGrid('navGrid','#message_attacher_grid_pager',{edit:false,add:false,del:false});
231var title = [get_lang("First page"), get_lang("Prev page"), get_lang("Next page"), get_lang("Last page")];
232$("#first_message_attacher_grid_pager").attr("title",title[0]);
233$("#prev_message_attacher_grid_pager").attr("title",title[1]);
234$("#next_message_attacher_grid_pager").attr("title",title[2]);
235$("#last_message_attacher_grid_pager").attr("title",title[3]);
236
237var $mailpreview_tabs = $( "#mailpreview_container").tabs({
238        tabTemplate: "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close'> Fechar </span></li>",
239        panelTemplate: '<div class="message mailpreview-message"></div>',
240        add: function( event, ui ) {
241                $mailpreview_tabs.tabs('select', '#' + ui.panel.id);
242       
243                if ($('#mailpreview_tabs_default_empty').length && $mailpreview_tabs.tabs("length") > 1) {     
244                        $mailpreview_tabs.tabs('remove', '#mailpreview_tabs_default_empty');
245                }
246        },
247        remove: function(event, ui) {
248                if (!$mailpreview_tabs.tabs("length") && !$('#mailpreview_tabs_default_empty').length) {
249                        /**
250                         * TODO: internacionalizar a string 'Nenhuma aba'
251                         */
252                        $mailpreview_tabs.tabs('add', '#mailpreview_tabs_default_empty', 'Nenhuma aba')
253                        .find('#mailpreview_tabs_default_empty').removeClass('mailpreview-message').addClass('empty-container')
254                        .html('<span class="message">' + get_lang('select a message to preview') + '</span>').end()
255                        .find('.ui-tabs-nav li:first .ui-icon-close').remove();
256                }
257        }
258});
259
260$( "#mailpreview_container span.ui-icon-close" ).unbind("click");
261$( "#mailpreview_container span.ui-icon-close" ).live( "click", function(e) {
262        var index = $("li", $mailpreview_tabs).index($(this).parent());
263        $mailpreview_tabs.tabs("remove", index);
264        e.stopImmediatePropagation();
265});
266
267if (!$mailpreview_tabs.tabs("length") && !$('#mailpreview_tabs_default_empty').length) {
268                        /**
269                         * TODO: internacionalizar a string 'Nenhuma aba'
270                         */
271                        $mailpreview_tabs.tabs('add', '#mailpreview_tabs_default_empty', 'Nenhuma aba')
272                        .find('#mailpreview_tabs_default_empty').removeClass('mailpreview-message').addClass('empty-container')
273                        .html('<span class="message">' + get_lang('select a message to preview') + '</span>').end()
274                        .find('.ui-tabs-nav li:first .ui-icon-close').remove();
275}
Note: See TracBrowser for help on using the repository browser.