source: sandbox/2.5.0-expresso1/expressoMail1_2/js/doiMenuData.js @ 7348

Revision 7348, 15.4 KB checked in by thiago, 12 years ago (diff)

Ticket #3088 - Correção do bug no submenu dos marcadores e validação.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1    function labeledMessages(isLabel){
2        if(get_current_folder().split("_")[0] == "local"){
3            alert("Pastas locais não fornece suporte para adição de marcadores.")
4            return true;
5        }
6                        if (isLabel) {
7                                var label = {
8                                        id: isLabel
9                                }       
10                                var lableleds = new Array();
11                                var msg_folder = current_folder;
12                                var messages = new Array();
13                                if(currentTab == 0){
14                                        var id = get_selected_messages().split(',');
15                                        for (i = 0; i < id.length; i++){
16                                                messages.push({
17                                                        msg_number: id[i],
18                                                        msg_folder: msg_folder
19                                                });
20                                        }
21                                }else{
22                                        // var id = get_selected_messages_search().split(',');
23                                        // var id_border = currentTab.replace(/[a-zA-Z_]+/, "");
24                                        // for (i = 0; i < id.length; i++){
25                                                // var tr = Element(id[i]+'_s'+id_border);
26                                                // msg_folder = tr.getAttribute('name');
27                                                // messages.push({
28                                                        // "msg_number": id[i],
29                                                        // "msg_folder": msg_folder,
30                                                // });
31                                        // }   
32                                       
33                                        var roles = get_selected_messages_search_role().split(',');
34                                        for (i = 0; i < roles.length; i++){
35                                                var tr = $('[role="'+roles[i]+'"]');
36                                                msg_folder = $(tr).attr('name');
37                                                var id = $(tr).attr('id');
38                                                messages.push({
39                                                        "msg_number": id.replace(/_[a-zA-Z0-9]+/,""),
40                                                        "msg_folder": msg_folder
41                                                });
42                                        }
43                                }
44
45                                for (var i=0; i < messages.length; i++) {
46                                        var hasLabel = DataLayer.get('labeled', {
47                                                filter: [
48                                                        'AND',
49                                                        ['=', 'labelId', label.id],
50                                                        ['=', 'folderName', messages[i].msg_folder],
51                                                        ['=', 'messageNumber', messages[i].msg_number]
52                                        ]});
53                                        if (!hasLabel || hasLabel == "") {
54                                                lableleds.push(
55                                                        DataLayer.put('labeled', {
56                                                                labelId:label.id,
57                                                                folderName:messages[i].msg_folder,
58                                                                messageNumber:messages[i].msg_number
59                                                        })
60                                                );
61                                               
62                                        }
63                                }
64                                DataLayer.commit(false, false, function(data){
65                                        for (var i=0; i < messages.length; i++) {
66                                                updateLabelsColumn({msg_number:messages[i].msg_number, boxname:messages[i].msg_folder, labels:false});
67                                        }               
68                                });
69                               
70
71                        }
72    }
73
74    function openListUsers(border_id) {
75        connector.loadScript("QuickCatalogSearch");
76        if (typeof(QuickCatalogSearch) == 'undefined'){
77                                        setTimeout('openListUsers('+border_id+')',500);
78                                        return false;
79                                }
80        QuickCatalogSearch.showCatalogList(border_id);
81    }
82
83
84    /**
85     * Cria a lista de marcadores para o submenu "Marcadores"
86     */
87    function getLabels(){
88        var labels = DataLayer.get('label',{criteria:{order: 'name'}});
89        var menuLabelItems = {};
90                menuLabelItems["new"] = {
91                        "name" : get_lang('New Label'),
92                        callback:function() {configureLabels({applyToSelectedMessages:true});}
93                };
94        for(var i=0; i<labels.length; i++) {
95                menuLabelItems["label"+labels[i].id] = {
96                        "name" : labels[i].name
97                }
98        }
99        return menuLabelItems;
100    }
101
102    /**
103     *  Carrega o menu de opção de uma mensagem
104     */
105    function loadMenu(){
106        var archive = "";
107        if(use_local_messages != 0){
108            archive = {"name": get_lang("Archive"), "icon": "archive", callback: function(key, opt){ proxy_mensagens.archive_message('inbox', 'get_selected_messages'); }}
109        }else{
110            archive = "";
111        }
112
113        var labelItems = getLabels();
114        $.contextMenu({
115                selector: ".table_box tbody tr",
116                callback: function(key, options) {
117                        //TODO - default actions
118                       
119                        /**
120                         * Apply labels to selected messages
121                         */
122                        var isLabel = key.match(/label(.*)/);
123                        if (isLabel && isLabel.length > 1) {
124                                labeledMessages(isLabel[1]);
125                        }
126                        selectAllFolderMsgs(false);
127                },
128                items: {"flagSeen":      {"name": get_lang("Mark as") + " " + get_lang('seen'), "icon": "seen", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('seen','get_selected_messages'); }},
129                "flagUnseen":    {"name": get_lang("Mark as") + " " + get_lang('unseen'), "icon": "unseen", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('unseen','get_selected_messages'); }},
130                "flagFlagged":   {"name": get_lang("Mark as") + " " + get_lang('important'), "icon": "important", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('flagged','get_selected_messages'); }},
131                "flagUnflagged": {"name": get_lang("Mark as") + " " + get_lang('normal'), callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('unflagged','get_selected_messages'); }},
132               
133                "sep1": "---------",
134                "label": { "name": get_lang("Labels"), "items": labelItems},
135                "follouwpflag":{"name": get_lang("Follow up"), callback: function(key, opt){ configureFollowupflag(); } },
136               
137                "sep2": "---------",
138                "move": {"name": get_lang("Move to")+"...", "icon": "move", callback: function(key, opt){ wfolders.makeWindow('', 'move_to'); }},
139                "remove": {"name": get_lang("Delete"),      "icon": "delete", callback: function(key, opt){ proxy_mensagens.delete_msgs('null','selected','null'); }},
140                "export": {"name": get_lang("Export"),      "icon": "export", callback: function(key, opt){ proxy_mensagens.export_all_messages(); }},
141                /* Airton
142                    TO-DO: Esse menu só deve aparecer quando a preferência de arquivamento local estiver ativada
143                    Como aqui dentro não dá pra fazer um if, fazer isso no início do método, passar toda essa linha para uma string e depois só colocar a variável aqui embaixo
144                */   
145                "archive": archive}
146
147        });
148    }
149    /*FIM*/
150    loadMenu();
151
152    if (!expresso_offline) {
153        var menuToolsItems = {
154                "i01": {"name": get_lang("Preferences"), "icon": "preferences-mail", callback: preferences_mail },
155                "i02": {"name": get_lang("Search"), "icon": "search-mail", callback: function(key, opt){ search_emails(""); }},
156                "103": {"name": get_lang("Edit filters"), "icon": "filter", callback: filterbox2 },
157                "i05": {"name": get_lang("Share mailbox"), "icon": "share-mailbox", callback: sharebox },
158                "i06": {"name": get_lang("Labels"), "icon": "tag", callback: configureLabels },
159                "i08": {"name": get_lang("Empty trash"), "icon": "empty-trash", callback: function(key, opt){ empty_trash_imap(); }}
160        };
161               
162        if(preferences.use_local_messages==1) {
163                if(expresso_local_messages.is_offline_installed()) {
164                        menuToolsItems["i09"] = {"name": get_lang("Send from queue"), "icon": "queue", callback: force_check_queue };
165                }
166        }
167    } else {
168        var menuToolsItems = {
169                "i01": {"name": get_lang("Search"), "icon": "search-mail", callback: function(key, opt){ search_emails(""); }}
170        }
171    }
172    $.contextMenu({
173        selector: "#link_tools",
174        trigger: 'hover',
175        className: 'context-menu-tools',
176        position: function($menu, x, y){
177                $menu.$menu.position({ my: "center top", at: "center bottom", of: this, offset:"0 0"});
178        },
179        determinePosition: function($menu, x, y){
180                $menu.css('display', 'block').position({ my: "center top", at: "center bottom", of: this}).css('display', 'none');
181        },
182        delay:500,
183        autoHide:true,
184        events: {
185                show: function(opt) {
186                        var $trigger = $(opt.selector).css({'background-color': '#ffffff', 'border': '1px solid #CCCCCC'});
187                        $('.context-menu-tools.context-menu-list.context-menu-root').css({'width': $trigger.css('width') });
188                        $('.context-menu-tools.context-menu-list').css({'background': '#ffffff'})
189                        .find(".context-menu-item").css({'background-color': '#ffffff'}).hover(
190                                function(){
191                                        $(this).css({'background-color': '#CCCCCC'});
192                                },
193                                function(){
194                                        $(this).css({'background-color': '#ffffff'});
195                                }
196                        );
197                        return true;
198                },
199                hide: function(opt) {
200                        $(opt.selector).css({'background-color': '', 'border': 'none'});
201                        return true;
202                }
203        },
204        callback: function(key, options) {
205                //TODO - default actions
206
207        },
208        items: menuToolsItems
209    });
210    var reComplexEmail = /<([^<]*)>[\s]*$/;
211    $.contextMenu({
212        selector: ".box",
213        autoHide:true,
214        items: {
215                "add" : {name: get_lang("Quick Add"), icon : "quick-add",callback: function(key, opt){ var fname = $(opt.$trigger).find("input").val().split('"')[1];ccQuickAddOne.showList(','+fname+', ,'+$.trim($(opt.$trigger).find("input").val()).match(reComplexEmail)[1]); }},
216                "remove" : {name:get_lang("Remove recipient"), icon:"delete-box",callback: function(key, opt){ $(opt.$trigger).remove(); }},
217                "sep1": "---------",
218                "quick_search" : {name:get_lang("Quick search of messages"), icon: "quick-search-contact",callback: function(key, opt){ search_emails($.trim($(opt.$trigger).find("input").val()).match(reComplexEmail)[1]); }},
219                "full_search" : {name:get_lang("Search messages of ..."), icon: "quick-search-contact",callback: function(key, opt){ search_emails("", $.trim($(opt.$trigger).find("input").val()).match(reComplexEmail)[1]);}}         
220        }
221    });
222
223    function updateLabelsColumn(messageInfo) {
224        var msg_number = messageInfo.msg_number;
225        //uid é o numero da mensagem quando os dados são carregados na busca rapida.
226        if(messageInfo.uid != '' && messageInfo.uid != 'undefined' && messageInfo.uid != null){
227                msg_number = messageInfo.uid;
228        }
229        var msg_folder = current_folder;
230        if(messageInfo.boxname != '' && messageInfo.boxname != 'undefined' && messageInfo.boxname != null){
231                msg_folder = messageInfo.boxname;
232        }
233       
234         if(current_folder == msg_folder || !current_folder){
235                 $('#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number)
236                 .html('<img src="../prototype/modules/mail/img/tag.png">');
237        }else{
238                $('tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number)
239                .html('<img src="../prototype/modules/mail/img/tag.png">');
240        }
241       
242        var menuItems = {};
243        if (messageInfo.labels) {
244                if($.isArray(messageInfo.labels)){
245                        var labels = messageInfo.labels;
246                        messageInfo.labels = {};
247                        for(var i in labels)
248                                messageInfo.labels[labels[i].id] = {backgroundColor: labels[i]['backgroundColor'],
249                                        borderColor: labels[i]['borderColor'],
250                                        fontColor: labels[i]['fontColor'], id: labels[i]['id'], name: labels[i]['name'],
251                                        uid: labels[i]['uid'] }
252                }       
253                menuItems = messageInfo.labels;
254        } else {
255                var labeleds = DataLayer.get('labeled', {
256                        criteria: {deepness: '2'},
257                        filter: [
258                                'AND',
259                                ['=', 'folderName', msg_folder],
260                                ['=', 'messageNumber', msg_number]
261                        ]
262                       
263                });
264                if (labeleds) {
265                        for (var i=0; i < labeleds.length; i++)
266                                menuItems[labeleds[i].label.id] = labeleds[i].label;
267                } else {
268                        $('#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number)
269                        .html('');
270                        //$.contextMenu( 'destroy', '#td_message_labels_' + msg_number +', #td_message_labels_search_' + msg_number+':first');
271                        $.contextMenu( 'destroy', '#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number);
272                        return false;
273                }
274        }
275        var menuItensLabel = {};
276        for(index in menuItems){
277                menuItensLabel[index] = {type: "label", customName: menuItems[index].name, id: msg_folder+"/"+msg_number+"#"+index};           
278        }
279        $.contextMenu.types.label = function(item, opt, root) {
280            $('<span>'+item.customName+'</span><span class="removeLabeled" title="'+get_lang("Remove Label")+'">x</span>')
281                .appendTo(this);
282                $(this).find('span.removeLabeled').click(function(){
283                        //TODO Mudar quando API abstrair atualizações no cache
284                        DataLayer.remove('labeled', false);
285                        DataLayer.get('labeled');
286                        DataLayer.remove('labeled', item.id);
287                        DataLayer.commit(false, false, function(){
288                                updateLabelsColumn({msg_number:msg_number, boxname:msg_folder, labels:false});
289                        });
290                });
291        };
292        if(current_folder == msg_folder || !current_folder){
293                $.contextMenu( 'destroy', '#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number);
294                $.contextMenu({
295                        selector: '#td_message_labels_' + msg_number +', tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number,
296                        trigger: 'hover',
297                        delay:100,
298                        autoHide:true,
299                        callback: function(key, options) {
300                                //TODO - default actions
301                        },
302                        items: menuItensLabel
303                });
304        }else{
305                $.contextMenu( 'destroy', 'tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number);
306
307                $.contextMenu({
308                        selector: 'tr[role="'+msg_number+'_'+msg_folder+'"] #td_message_labels_search_' + msg_number,
309                        trigger: 'hover',
310                        delay:100,
311                        autoHide:true,
312                        callback: function(key, options) {
313                                //TODO - default actions
314                        },
315                        items: menuItensLabel
316                });     
317        }
318    }
319
320    function loadExtraLDAPBox(data, element){
321        menuItensLabel = {};
322        menuItensLabel["Name"] = {name: "<b>"+data[0].value+"</b>", disabled: true};           
323        menuItensLabel["Email"] = {name: data[1].value, disabled: true};       
324        if(data[2].value){
325                menuItensLabel["TelefoneLabel"] = {name: "<b>"+get_lang("Telephone")+"</b>", disabled: true};
326                menuItensLabel["TelefoneValue"] = {name: data[2].value, disabled: true};
327        }
328        if(data[3]){
329                if(data[3].value == "TRUE"){
330                        menuItensLabel["outOffice"] = {name: "<b>"+get_lang("Out of office")+"</b>", disabled: true};
331                        menuItensLabel["outOfficeValue"] = {name: data[4].value.substring(0, 20), disabled: true};
332                }
333        }
334        $.contextMenu({
335                selector: "#content_id_"+currentTab+" "+element+" .box-info",
336                trigger: 'hover',
337                delay:100,
338                autoHide:true,
339                items: menuItensLabel
340        });     
341    }
342
343    function loadGroupBox(data, element){
344        menuItensLabel = {};
345        menuItensLabel["ContactGroupLabelAll"] = {name:"<b>"+get_lang("Group contacts")+"</b>", disabled: true};
346        menuItensLabel["sep1"] = "---------";
347        if(data.itens){
348                var aux = 0;
349                var ctcName = "";
350                for(var item in data.itens){
351                        if(parseInt(item) <= 4){
352                                ctcName = data.itens[item].data[0].value;
353                                ctcName = ctcName.length > 2 ? ctcName : data.itens[item].data[2].value.substr(0,data.itens[item].data[2].value.indexOf("@"));
354                                menuItensLabel["ContactGroupLabel"+item] = {name: "<b>"+ctcName+"</b>", disabled: true};
355                                menuItensLabel["ContactGroupValue"+item] = {name: data.itens[item].data[2].value, disabled: true};
356                        }else{
357                                aux++;
358                                if(aux == 1)
359                                        menuItensLabel["MoreContactGroupValue"] = {name : get_lang("And more %1 contact", aux), disabled: true };
360                                else
361                                        menuItensLabel["MoreContactGroupValue"] = {name : get_lang("And more %1 contact", aux)+"s", disabled: true };
362                        }
363                }
364        }
365        $.contextMenu({
366                selector: "#content_id_"+currentTab+" "+element+" .box-info",
367                trigger: 'hover',
368                delay:100,
369                autoHide:true,
370                items: menuItensLabel
371        });     
372    }
373
374
375
376
377
Note: See TracBrowser for help on using the repository browser.