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

Revision 5690, 17.3 KB checked in by douglasz, 12 years ago (diff)

Ticket #2486 - Correção de interface e erros de variaveis

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