source: trunk/prototype/modules/mail/js/label.js @ 7635

Revision 7635, 19.0 KB checked in by acoutinho, 11 years ago (diff)

Ticket #3227 - Alertas (amarelos) do Expresso travam operacees do usuario

  • Property svn:executable set to *
RevLine 
[6013]1function msgCallback(msg){
2        switch(msg){
3                case '#LabelNameError':
4                        alert('Já existe um marcador com esse nome.');
5                        break;
6                case '#LabelSlotError':
7                        alert('Atingido limite de marcadores criados.');
8                        break; 
9                default:
10                        alert('Ocorreu um erro ao salvar o Marcador');
11        }
12}
[5547]13function configureLabel(event, ui){
14        var idmarkernow = $(this).find('[name="labelItemId"]').val();
15        winElement.find('.edit-label').val(idmarkernow);
16        winElement.find('.input-nome').val($(this).find("span").text());
17       
18        var colorpicker = winElement.find('.lebals-colorpicker');
19        colorpicker.find('input[name="backgroundColor"]').val(rgb2hex($(this).css("backgroundColor")))
20        .css("background-color", $(this).css("backgroundColor")).focus().end()
21        .find('input[name="fontColor"]').val(rgb2hex($(this).css("color"))).css("background-color", $(this).css("color")).focus().end()
22        .find('input[name="borderColor"]').val(rgb2hex($(this).css("border-left-color"))).css("background-color", $(this).css("border-left-color")).focus().end()
23        .find('.preview-label-outer').css({
24                'background-color':$(this).css("backgroundColor"),
25                'color':$(this).css("color"),
26                'border-color':$(this).css("border-left-color")
27        })             
28        winElement.find(".preview-label-inner").text($(this).text());
29}
[5564]30
[5643]31function editLabel(data){       
[5537]32        var conteudoSpan = $(this).parent().find(".text-list").text();
33        var span = $(this).parent().find(".text-list");
34        $(this).parent().trigger('click').unbind('click', configureLabel).find("span.text-list")
[5603]35        .html('<input name="edit-value-list" class="edit-value-list" type="text" maxlength="18" value="'+conteudoSpan+'">').find("input[name='edit-value-list']").keydown(function(event){
[5537]36                event.stopPropagation();
37                $("input.edit-value-list").keyup(function () {
38                        var value = $(this).val();
39                        winElement.find('.input-nome').val(value);
40                }).keyup();
41                if(event.keyCode == 13){
[5603]42                        event.preventDefault();
43                        var nameLabel = $(".label-list").find(".edit-value-list").val();
[5899]44                        $(span).html(conteudoSpan)
45                        .parent().find('.edit').css("display","").parents("li").click(configureLabel);
[5643]46                        save_editLabel(nameLabel, data.applyToSelectedMessages);
[5537]47                }else if( event.keyCode == 27){
48                        $(this).trigger("focusout");
49                }
50        }).focusout(function(){
51                $(span).html(conteudoSpan)
[5713]52                .parent().find('.edit').css("display","").parents("li").click(configureLabel);
[5537]53        }).focus();
[5713]54        $(this).hide();
[5537]55}
[5566]56
[5537]57function deleteLabel(event){
58        var id = $(this).parents(".label-item").attr("class").match(/label-item-([\d]+[()a-zA-Z]*)/)[1];
[5820]59        var nameLabel = winElement.find(".input-nome").val();
60        confirmDelete(id, nameLabel);
[5537]61        event.stopImmediatePropagation();
62}
[5564]63
64function colors_suggestions(){
65        return [
66                                {name:'Padrão', border:'#3366cc', font:'#ffffff', background:'#3366cc'},
67                                {name:'Coala', border:'#123456', font:'#ffffff', background:'#385c80'},
68                                {name:'Tomate', border:'#d5130b', font:'#111111', background:'#e36d76'},
69                                {name:'Limão', border:'#32ed21', font:'#1f3f1c', background:'#b2f1ac'},
70                                {name:'Alto contraste', border:'#000000', font:'#ffffff', background:'#222222'}
71                        ]               
72}
[5566]73
[5690]74function rgb2hex(rgb){ 
75        if(!!(rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/))){
76                return "#" +
77                ("0" + parseInt(rgb[1],10).toString(16)).slice(-2) +
78                ("0" + parseInt(rgb[2],10).toString(16)).slice(-2) +
79                ("0" + parseInt(rgb[3],10).toString(16)).slice(-2);
80        }else{
81                return rgb;
82        }
[5564]83}
84
[6566]85function updateMessageLabels(msgsReference){
[5586]86        for(var i = 0; i < msgsReference.length; i++){
87                updateLabelsColumn({msg_number: msgsReference[i].messageNumber, boxname: msgsReference[i].folderName});
88        }       
89}
90
[5820]91function confirmDelete(id,nameLabel){
[5824]92        $.Zebra_Dialog('Deseja excluir esse marcador <strong>'+nameLabel+'</strong> das conversas que está relacionado e excluí-lo sem remover as conversas?', {
[5564]93                'type':     'question',
[7612]94                'custom_class': (is_ie ? 'configure-zebra-dialog custom-zebra-filter' : 'custom-zebra-filter'),
[5564]95                'title':    'Atenção',
[5713]96                'buttons': ['Sim','Não'],               
[5586]97                'overlay_opacity': '0.5',
[5564]98                'onClose':  function(caption) {
99                        if(caption == 'Sim'){
100                                delete_label(id);
101                        }
102                }
103        });     
[5713]104        if(is_ie)
105                $(".ZebraDialogOverlay").css("z-index","1006");
[5566]106}               
107       
[5625]108function save_editLabel(nameLabel, apply){     
[6043]109
110        var lengthSpace = $.trim(nameLabel);
[5606]111       
[6043]112        if( lengthSpace.length >= 2){   
[5603]113                var qtdLi = $(".label-list-container ul").find("li").not(".empty-item").length;
114                // salvar marcador
[6043]115                if(qtdLi > 0 ){
[5603]116                        $(".save-label").button("disable");
117                        var labelEdited = {
118                                id : winElement.find(".edit-label").val(),
119                                uid: User.me.id,
[5890]120                                name : winElement.find('.input-nome').val().trim(),
[5603]121                                backgroundColor : winElement.find("input[name='backgroundColor']").val(),
122                                fontColor : winElement.find("input[name='fontColor']").val(),
123                                borderColor : winElement.find("input[name='borderColor']").val()
124                        }
125                        DataLayer.put('label', labelEdited.id, labelEdited);
[5881]126                        DataLayer.commit(false, false, function(data){
127                                var hasLabel = true;
[5909]128                                $.each(data, function(index, value) {
[6641]129                                       
130                                        hasLabel = typeof value == 'object' ? false : value;
131                                       
[5909]132                                });
133                                       
[5881]134                                        if(!hasLabel){
[5892]135                                                $(".label-list-container .label-list li").each(function(){
136                                                        var regex_match_2 = $(this).attr("class").match(/label-item-([\d]+[()a-zA-Z]*)/);
137                                                       
138                                                         if(regex_match_2 && regex_match_2[1] && regex_match_2[1] == labelEdited.id){
139                                                           $(this).html("<input type='hidden' name='labelItemId' class='id-item-list' value='"+labelEdited.id+"'>"+"<span class='text-list'>"+labelEdited.name+"</span><div class='button close tiny' style='float: right'></div><div class='button edit tiny' style='float: right'></div>").css({
140                                                                "background" : labelEdited.backgroundColor,
141                                                                "color" : labelEdited.fontColor,
142                                                                "border-color" : labelEdited.borderColor       
143                                                           });
144                                                           $(this).trigger('click');
145                                                         }     
146                                                });
147                                               
148                                                $("#MyMarckersList .label-list li").each(function(){
149                                                        var regex_match_2 = $(this).attr("class").match(/label-item-([\d]+[()a-zA-Z]*)/);
150                                                       
151                                                        if(regex_match_2 && regex_match_2[1] && regex_match_2[1] == labelEdited.id){
152                                                                $(this).html("<input type='hidden' name='labelItemId' class='id-item-list' value='"+labelEdited.id+"'>"+"<span>"+labelEdited.name+"</span>");
153                                                                $(this).find(".square-color").css('background', labelEdited.backgroundColor);
154                                                        }       
155                                                });
156                                       
[5881]157                                                winElement.find(".insert-label").val("");
158                                                $.Watermark.ShowAll();
159                                               
160                                                $(".label-list-container .label-list li").find('.button').button()
161                                                        .filter('.edit').button({icons:{primary:'ui-icon-pencil'}, text:false}).end()
162                                                        .filter('.close').button({icons:{primary:'ui-icon-close'}, text:false});
163                                                       
164                                                winElement.find('.edit').unbind("click").click(editLabel);                             
165                                                winElement.find('.close').click(deleteLabel);
166                                               
167                                                draw_tree_labels();
[6566]168                                                var msgsReference = DataLayer.get('labeled', {filter: ['=', 'labelId', ''+labelEdited.id]}, true);
169                                                updateMessageLabels(msgsReference);
[5892]170                               
[5881]171                                                /**
172                                                * Atualiza menu remove o menu presente em cada mensagem listada em uma pasta
173                                                * e carrega novamente para que os dados sejam atualizados
174                                                */
175                                                $.contextMenu( 'destroy', ".table_box tbody tr");
176                                                loadMenu();
177                                        }else{
[6013]178                                                msgCallback(hasLabel);
[5881]179                                        }
[5899]180                                       
181                                        $(".add-label-button").empty()
182                                        .addClass("ui-icon ui-icon-plus");
[6043]183                                        //winElement.find('.input-nome').val("").focus;
[5603]184                        });
185                // criar marcador
186                } else {
187                        var nameLabel = winElement.find(".input-nome").val();
[5625]188                        new_label(nameLabel, false, apply);                             
[5677]189                        $.Watermark.ShowAll();         
190                        $(".save-label").button("disable");     
[5566]191                }
[5899]192                //$(".label-list-container .label-list").find(".label-item-"+labelEdited.id).trigger("click");
[5603]193        } else {
[5789]194                alert("Mínimo 2 caracteres");
[5603]195        }       
[5554]196}
[5566]197
[5537]198function delete_label(id){
199        $(".label-list li").each(function () {
200                var regex_match = $(this).attr("class").match(/label-item-([\d]+[()a-zA-Z]*)/);
201                if (regex_match && regex_match[1] && regex_match[1] == id) {   
202                        $(this).remove();
203                }
204        });
[6566]205       
206        var msgsReference = DataLayer.get('labeled', {filter: ['=', 'labelId', ''+id]}, true);
[5586]207               
[5537]208        DataLayer.remove('label', id);
[6566]209
[5586]210        DataLayer.commit(false, false, function(data){
211                $.contextMenu( 'destroy', ".table_box tbody tr");
212                loadMenu();
[6566]213                updateMessageLabels(msgsReference);     
[5586]214        });
[5537]215        winElement.find(".label-list li:first").trigger("click");
216       
217        if($(".label-list li").length == 0){
[5675]218                winElement.find(".label-list-container").html('<ul class="label-list"><li class="empty-item">'+get_lang("No labels found.")+'.</li></ul>');
219                $(".save-label").button("disable");     
220        }
[5537]221        var qtdLi = $(".label-list-container ul").find("li").not(".empty-item").length;
222        if (qtdLi == 0){
[5713]223                $(".my-labels").hide();
[5537]224                $(".label-list-container ul").find(".empty-item").css("display","");
225                winElement.find(".buttons .save-label .ui-button-text").text('Criar');
226                $(".delete-label").button("disable");   
[5675]227                $(".save-label").button("disable");     
[5537]228                               
229                winElement.find('.input-nome').val("");
230                winElement.find(".preview-label-inner").text("");
231       
232                var colorpicker = winElement.find('.lebals-colorpicker');
233                colorpicker.find('input[name="backgroundColor"]').val("#ebebeb")
234                .css("background-color", "#ebebeb").focus().end()
235                .find('input[name="fontColor"]').val("#000000").css("background-color", "#000000").focus().end()
236                .find('input[name="borderColor"]').val("#000000").css("background-color", "#000000").focus().end()
237                .find('.preview-label-outer').css({
238                        'background-color':"#ebebeb",
239                        'color':"#000000",
240                        'border-color':"#000000"
241                });
242                $(".input-nome").keyup(function () {
243                        var value = $(this).val();
244                        winElement.find('.preview-label-inner').text(value);
245                }).keyup();                             
[5675]246        }       
[5537]247}
[5566]248
[5625]249function new_label(nameLabel, isNew, apply){
[5537]250        var labelCreated = {
251                uid: User.me.id,
[5890]252                name : nameLabel.trim(),
[5547]253                backgroundColor : !!isNew ? '#ebebeb' : winElement.find("input[name='backgroundColor']").val(),
254                fontColor : !!isNew ? '#000000' : winElement.find("input[name='fontColor']").val(),
255                borderColor :!!isNew ? '#000000' : winElement.find("input[name='borderColor']").val()
[5537]256        }
257        DataLayer.put('label', labelCreated);
258       
259        $(".add-label-button").removeClass("ui-icon ui-icon-plus")
260        .html('<img alt="Carregando" title="Carregando" style="margin-left:10px;" src="../prototype/modules/mail/img/loader.gif" />');
[6023]261        var hasLabel = true;
262        var labelId;
[5881]263        DataLayer.commit(false, false, function(data){
[5909]264                $.each(data, function(index, value) {
265                        if(typeof value == 'object'){
[5881]266                                hasLabel = false;
[6023]267                                labelId = value.id;
[5909]268                        }else{
269                                hasLabel = value;
270                        }
271                });
[6023]272       
[5881]273                if(!hasLabel){
274                        newLabel = {
[6023]275                                id: labelId,
276                                name : nameLabel.trim(),
[5881]277                                uid: User.me.id,
278                                bgColor : !!isNew ? '#ebebeb' : winElement.find("input[name='backgroundColor']").val(),
279                                fontColor : !!isNew ? '#000000' : winElement.find("input[name='fontColor']").val(),
280                                borderColor : !!isNew ? '#000000' : winElement.find("input[name='borderColor']").val()
281                        };
[5625]282               
[5881]283                        /** Marca as mensagens selecionadas com o marcador criado*/
284                        if(apply){
285                                labeledMessages(newLabel.id)
286                        }
287                       
288                        $(".label-list-container ul").find(".empty-item").css("display","none");
289                        $(".label-list-container ul")
290                        .prepend(DataLayer.render("../prototype/modules/mail/templates/label_listitem.ejs", newLabel))
291                        .find("li:first")
292                        .fadeIn("slow").click(configureLabel);
293                       
294                        draw_tree_labels();
[5537]295
[5881]296                        $(".label-list-container .label-list li").not(".empty-item").click(function(){
297                                $(".label-list-container .label-list li").find("img").remove();
298                                $(".label-list-container .label-list li.label-item").removeClass("selected");
299                                $(this).prepend("<img src='../prototype/modules/mail/img/triangle.png' style='margin: 0 5px 0 -5px;'>");
300                                $(this).addClass("selected");
301                        });
302                       
303                        $(".label-list-container .label-list li").find('.button').button()
304                        .filter('.edit').button({icons:{primary:'ui-icon-pencil'}, text:false}).end()
305                        .filter('.close').button({icons:{primary:'ui-icon-close'}, text:false});
306                       
307                        //posiciona para edição o label inserido                       
308                        winElement.find("ul.label-list li:first").trigger("click");                     
309                        winElement.find(".buttons .save-label .ui-button-text").text('Salvar');
310                        $(".delete-label").button("enable");
311                       
312                        winElement.find('.edit').unbind("click").click(editLabel);                             
313                        winElement.find('.close').click(deleteLabel);
314                       
315                        $(".my-labels").show();
316                       
317                        $.contextMenu( 'destroy', ".table_box tbody tr");
318                        loadMenu();
319                       
320                        $(".add-label-button").empty()
321                        .addClass("ui-icon ui-icon-plus");
322                }else{
323                        $(".add-label-button").empty()
324                        .addClass("ui-icon ui-icon-plus");
[6013]325                        msgCallback(hasLabel);
[5881]326                }
[5537]327        });
328}
[5566]329
[7635]330function SortByName(a, b){
331    var aName = a.name.toLowerCase();
332    var bName = b.name.toLowerCase();
333    return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));
334}
335
336//Reduz a quantidade de requests
337function orderLabel(labels){
338
339    if(labels == "")
340        return labels;
341
342    if(!$.isArray( labels )){
343        var array = [];
344
345        for(var i in labels){
346
347            array[ array.length ] = labels[ i ];
348
349        }
350
351        labels = array;
352
353    }
354
355    return labels.sort(SortByName);
356}
357
[5533]358function init_label(data){
359
360        winElement = data.window;
[5547]361       
[5533]362        //TODO Mudar quando API abstrair atualizações no cache
[7635]363        var labels = DataLayer.get('label');
364
365    labels = orderLabel( labels );
[5533]366       
367        if(labels){
368                Label_List = winElement
369                .find(".label-list-container").html(DataLayer.render("../prototype/modules/mail/templates/label_list.ejs", {labels: labels}));
370               
371        }else{
[5537]372                //Exibe a mensagem informando o usuário de que não há nenhum marcador cadastrado.
[5533]373                Label_List = winElement
[5586]374                .find(".label-list-container").html('<ul class="label-list"><li class="empty-item">'+get_lang("No labels found.")+'.</li></ul>');
[5533]375               
376        }
377        Label_List.end()
378        .find('.button').button()
379        .filter('.edit').button({icons:{primary:'ui-icon-pencil'}, text:false}).end()
380        .filter('.close').button({icons:{primary:'ui-icon-close'}, text:false});       
381       
382        winElement.find('.edit').click(editLabel);
[5537]383        winElement.find('.close').click(deleteLabel);
[5533]384       
[5537]385        //marca 'd agua
[5533]386        winElement.find(".insert-label").Watermark(winElement.find(".insert-label").val());
387       
[6043]388        /*
[5533]389        $("input.insert-label").keyup(function () {
390                $.Watermark.HideAll();
391                var value = $(this).val();
392                winElement.find('.input-nome').val(value);
393        }).keyup();
[6043]394        */
[5533]395        if (!(labels)){
396                winElement.find(".buttons .save-label .ui-button-text").text('Criar');
397                $(".delete-label").button("disable");
398        }else{
399                winElement.find(".label-list li:first").addClass("selected").prepend("<img src='../prototype/modules/mail/img/triangle.png' style='margin: 0 5px 0 -5px;'>");
400        }
401        $(".save-label").button("disable");
402        /**
403        * seta a ação de click para os marcadores listados na tela
404        */
405        winElement.find(".label-list li").not(".empty-item").click(configureLabel);
406       
407        if (data.selectedItem)
408                winElement.find(".label-list li.label-item-"+data.selectedItem).trigger("click");
409        else
410                winElement.find(".label-list li:first").trigger("click");
411               
412        var dataColorPicker = {
413                colorsSuggestions: colors_suggestions()
414        };
415       
416        winElement.find('select.color-suggestions').change(function() {
417                $(".save-label").button("enable");
418                var colorpicker = winElement.find('.lebals-colorpicker');
419                var colors;
420                if(colors = dataColorPicker.colorsSuggestions[$(this).val()]) {
421                        colorpicker
422                        .find('input[name="fontColor"]').val(colors.font).focus().end()
423                        .find('input[name="backgroundColor"]').val(colors.background).focus().end()
424                        .find('input[name="borderColor"]').val(colors.border).focus().end()
425
426                        .find('.preview-label-outer').css({
427                                'background-color':dataColorPicker.colorsSuggestions[$(this).val()].background,
428                                'border-color':dataColorPicker.colorsSuggestions[$(this).val()].border,
429                                'color':dataColorPicker.colorsSuggestions[$(this).val()].font
430                        });
431                }                                       
432        });
433        var colorpickerPreviewChange = function(color) {
434                       
435                var pickedup = winElement.find('.colorwell-selected').val(color).css('background-color', color);
436
437                $(".save-label").button("enable");
438               
439                var colorpicker = winElement.find('.lebals-colorpicker');                       
440
441                if (pickedup.is('input[name="backgroundColor"]')) {
442                        colorpicker.find('.preview-label-outer').css('background-color',color);
443                } else if (pickedup.is('input[name="fontColor"]')) {
444                        colorpicker.find('.preview-label-outer').css('color',color);
445                } else if (pickedup.is('input[name="borderColor"]')) {
446                        colorpicker.find('.preview-label-outer').css('border-color',color);
447                }               
448        }
449               
450        var f = $.farbtastic(winElement.find('.colorpicker'), colorpickerPreviewChange);
451        var selected;
452                               
453        winElement.find('.colorwell').each(function () {
454                f.linkTo(this);
455        })
456        .focus(function() {
457                if (selected) {
458                        $(selected).removeClass('colorwell-selected');
459                }
460                $(selected = this).addClass('colorwell-selected');
461                f.linkTo(this, colorpickerPreviewChange);
462                f.linkTo(colorpickerPreviewChange);
463        });
464       
465        winElement.find(".add-label-button").click(function (event) {
466                $.Watermark.HideAll();
[5537]467                var nameLabel = winElement.find(".insert-label").val();
[5607]468               
469                var lengthSpace = $.trim(nameLabel);
470               
[5789]471                if(lengthSpace.length >= 2){
[5625]472                        new_label(nameLabel, true, data.applyToSelectedMessages);
[5537]473                        $.Watermark.ShowAll();
474                        winElement.find(".insert-label").val("");
[5533]475                        } else {
[5789]476                                alert("Mínimo 2 caracteres");
[5533]477                        }
478                event.stopImmediatePropagation();
479        });
480       
481        winElement.find('.insert-label').keydown(function(event, ui) {
482                if (event.keyCode == 13)
483                        winElement.find(".add-label-button").trigger('click');
484        });
[5537]485       
[5533]486        //excluir marcador {deve ser para o botão grande na janela de edição e nao o pequeno da lista}
487        winElement.find(".buttons .delete-label").click(function(event){
[5586]488                var id = winElement.find(".edit-label").val();         
[5820]489                var nameLabel = winElement.find(".input-nome").val();   
490                confirmDelete(id, nameLabel);
[5533]491                event.stopImmediatePropagation();
492        });
[5537]493       
[5533]494        $(".label-list-container .label-list li").not(".empty-item").click(function(){
495                $(".label-list-container .label-list li").find("img").remove();
496                $(".label-list-container .label-list li.label-item").removeClass("selected");
497                $(this).prepend("<img src='../prototype/modules/mail/img/triangle.png' style='margin: 0 5px 0 -5px;'>");
498                $(this).addClass("selected");
499        });
500               
501        //salvar/criar marcador
[5564]502        winElement.find(".buttons .save-label").click(function(){
[5603]503                var nameLabel = winElement.find(".input-nome").val();
[5625]504                save_editLabel(nameLabel, data.applyToSelectedMessages);
[5564]505        });     
[5533]506        //desfazer marcador
507        winElement.find(".buttons .undo-label").click(function(event){
508                var edit = winElement.find(".edit-label").val();               
509                $(".label-list-container .label-list li").each(function(){
510                        var regex_match_3 = $(this).attr("class").match(/label-item-([\d]+[()a-zA-Z]*)/);
511                        if(regex_match_3 && regex_match_3[1] && regex_match_3[1] == edit){
512                                $(this).trigger("click");
513                        }
514                });
515        });
516       
517        //fechar
518        $(".button-close-window .close-window").click(function(){
519                $(".label-configure-win").dialog("close");
[5643]520        });
[5533]521       
[5643]522        winElement.find(':input').change(function(event){
[5673]523                if (event.keyCode != '27' && event.keyCode != '13' && !$(event.target).is(".edit-value-list") && !$(event.target).is(".insert-label") )
[5643]524                winElement.find(".save-label").button("enable");
525        }).keydown(function(event){
[5673]526                if (event.keyCode != '27' && event.keyCode != '13' && !$(event.target).is(".edit-value-list") && !$(event.target).is(".insert-label"))
[5643]527                winElement.find(".save-label").button("enable");
528        });     
529
[5533]530        $(".input-nome").keyup(function () {
531                                var value = $(this).val();
532                                winElement.find('.preview-label-inner').text(value);
[5537]533        }).keyup();     
[6043]534}
Note: See TracBrowser for help on using the repository browser.