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

Revision 6558, 10.9 KB checked in by natan, 12 years ago (diff)

Ticket #2845 - Atualizacao da API na busca de mensagens - Correcao no alinhamento do grid

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