source: trunk/prototype/modules/filters/filters.js @ 5662

Revision 5662, 27.0 KB checked in by gustavo, 12 years ago (diff)

Ticket #2088 - Melhorias no editor de regras de filtro de mensagens do Expresso

Line 
1valid_save = function(){
2        var accord = list_container.find(".rule-details-container").accordion({autoHeight: false});
3        if(list_container.find('[name="name"]').attr("disabled") != "disabled")
4        {
5                if($.trim(list_container.find('[name="name"]').val()) == ""){
6                        $.Zebra_Dialog("<strong>Nenhum nome</strong> preenchido",{
7                                'onClose':  function(caption) {
8                                        list_container.find('[name="name"]').focus();
9                                }
10                        });
11                        accord.accordion('activate',0);
12                        return false;
13                }else if($.trim(list_container.find('[name="name"]').val()) == "vacation"){
14                        $.Zebra_Dialog("Nome inválido, <strong>'vacation'</strong> é uma palavra reservada",{
15                                'onClose':  function(caption) {
16                                        list_container.find('[name="name"]').val("").focus();
17                                }
18                        });
19                        accord.accordion('activate',0);
20                        return false;
21                }else{
22                        filter_list = DataLayer.get("filter", true);
23                        var error = false;
24                        $.each(filter_list, function(index, value){
25                                if(filter_list[index].name == list_container.find('[name="name"]').val()){
26                                        $.Zebra_Dialog("Já existe um filtro com este nome",{
27                                                'onClose':  function(caption) {
28                                                        list_container.find('[name="name"]').val("").focus();
29                                                }
30                                        });
31                                        accord.accordion('activate',0);
32                                        error = true;
33                                        return;
34                                }       
35                        });
36                        if(error){
37                                return false;
38                        }
39                }
40        }
41        var criteria = "";
42        var criteria_list = list_container.find('[name="criteriaValue[]"]');
43        $.each(criteria_list, function(index, value){
44                criteria += $.trim($(criteria_list[index]).val());
45        });
46        if(criteria == ""){
47                $.Zebra_Dialog("Nenhum <strong>criterio</strong> preenchido",{
48                        'onClose':  function(caption) {
49                                list_container.find('[name="criteriaValue[]"]:first').focus();
50                        }
51                });
52                accord.accordion('activate',0);
53                return false;
54        }
55        if(list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").length){
56                if($.trim(list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").val()) == ""){
57                        $.Zebra_Dialog("Preencha o valor da <strong>ação</strong>",{
58                                'onClose':  function(caption) {
59                                        list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").focus();
60                                }
61                        });
62                        return false;
63                }
64        }
65        return true;
66};
67
68bytes2Size = function(bytes) {
69        var sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
70        if (bytes === 0) return 'n/a';
71        var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
72        var size = (i<2) ? Math.round((bytes / Math.pow(1024, i))) : Math.round((bytes / Math.pow(1024, i)) * 100)/100;
73        return  size + ' ' + sizes[i];
74};
75
76flags2Class = function(cellvalue) {
77        var flags_enum = cellvalue.split(',');
78        var classes = '';
79        for (var i=0; i<flags_enum.length; i++){
80                classes += '<span class="icon-'+flags_enum[i].toLowerCase()+'"> </span>';
81        }
82        return classes;
83};
84
85date2Time = function (timestamp) {
86        var date = new Date();
87        if ((date.getTime() - timestamp) < (24*60*60*1000)) {
88                return '<span class="timable" title="'+timestamp+'"> </span>';
89        } else {
90                date = new Date(timestamp);
91                var b = date.toISOString().split("T")[0].split("-");
92                var c = b[2] + "/" + b[1] + "/" + b[0];
93                return '<span class="datable">' + c + '</span>';
94        }
95};
96
97unorphanize = function(root, element) {
98        var ok = false;
99        for (var i=0; i<root.length; i++) {
100                if (root[i].id == element.parentFolder) {
101                        element.children = [];
102                        root[i].children.push(element);
103                        return true;
104                } else if (ok = unorphanize(root[i].children, element)) {
105                        break;
106                }
107        }
108
109        return ok;
110};
111
112keys = function( object ){
113 
114  var array = [];
115 
116  for( var key in object )
117       array[ array.length ] = key;
118 
119  return( array );
120
121}
122
123showDetails = function( filter ){
124 
125    form.get(0).reset();
126
127    nameObj.val( filter.name );
128        nameObj.attr("disabled", "disabled");
129    for( var i = 0; i < filter.criteria.length; i++ ){
130
131                criterias.filter( '[value="' + filter.criteria[i].field + '"]' )
132                .siblings( '[name="criteriaOperator[]"]' ).val( filter.criteria[i].operator ).end()
133                .siblings( '[name="criteriaValue[]"]' ).val( filter.criteria[i].value );
134
135    }
136
137       
138    for( var i = 0; i < filter.actions.length; i++ ){
139                actions.filter( '[value="' + filter.actions[i].type + '"]' ).attr("checked", "True");
140                actions.filter( '[value="' + filter.actions[i].type + '"]' ).val( filter.actions[i].type )
141                .siblings( '[name="actionParameter[]"]' ).val( filter.actions[i].parameter );
142                if(filter.actions[i].type == "redirect")
143                        actions.siblings('[name="addressRedirect"]').val(filter.actions[i].parameter);
144                if(filter.actions[i].type == "reject") 
145                        actions.siblings('[name="messageReject"]').val(filter.actions[i].parameter);
146                if(filter.actions[i].type == "fileinto" || filter.actions[i].type == "setflag")
147                        actions.parent().find('[value="'+filter.actions[i].parameter+'"]').attr("selected", "selected");
148    }
149 
150    //isExact.val( filter.isExact != "false"? "and" : "or" );
151        isExact.filter('[value="'+(filter.isExact != "false"? "and" : "or")+'"]').attr("checked", "True");
152}
153
154/* --- ------ --- */
155
156DataLayer.codec( "filter", "detail", {
157 
158  decoder: function( form ){
159      if( form.vacation )
160          return {
161
162                criteria: [{ value: "vacation", operator: "", field: "vacation" }],
163                actions: [{ parameter: form.vacation, type: "vacation" }],
164                id: "vacation",
165                name: "vacation",
166                isExact: false,
167                applyMessages : "",
168                enabled : false
169      }
170
171      return {
172                //id: form.name,
173                name: form.name ? form.name : nameObj.val(),
174                isExact: ( form.isExact === "and" ),
175                criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){ 
176                        return (!form.criteriaValue[i]) ? null:
177                                {value:  form.criteriaValue[i],
178                                  operator: criteriaOperator,
179                                  field:  form.criteriaType[i]};
180
181                }),
182                actions: $.map( form.actionType || [], function( type, i ){
183                        var the_parameter = form.actionParameter[i];
184                       
185                        !the_parameter ? the_parameter = form.actionParameter[i+1] : "";
186                        if (type == 'fileinto') {
187                                the_parameter = form.valueFileInto;
188                        }
189                        if (type == 'reject') {
190                                the_parameter = form.messageReject;
191                        }
192                        if (type == 'fileintoInbox') {
193                                if(!$('[value="fileintoInbox"]').parent().hasClass("hidden")){
194                                        type = 'fileinto';
195                                        the_parameter = 'INBOX';
196                                }else{
197                                        return;
198                                }
199                        }
200                        if (type == 'fileintoTrash') {
201                                type = 'fileinto';
202                                the_parameter = 'INBOX/Trash';
203                        }
204                        if (type == 'redirect') {
205                                the_parameter = form.addressRedirect;
206                        }
207                        if (type == 'setflag') {
208                                the_parameter = form.valueSetFlag;
209                        }
210                       
211                        return (!type) ? null:
212                              {parameter: the_parameter, type: type };
213
214                }),
215                enabled : false,
216                applyMessages: allMessages? !$.isEmptyObject( selectedMessages ) ?
217                keys( selectedMessages ) : allMessages : ""
218               
219      };
220  },
221 
222  encoder: function( filters ){
223       
224        var rules = [];
225
226        for( var id in filters )
227              rules[ rules.length ] = filters[id];
228
229        return { rules: rules };
230
231  }
232});
233
234DataLayer.codec( "folder", "select", {
235 
236  decoder:function(){
237
238     
239   
240  },
241  encoder:function( data ){
242 
243      var tree1 = [], tree2 = [], tree3 = [];
244
245      for (var i=0; i<data.length; i++) {
246
247              if (/^INBOX/.test(data[i].id)) {
248                      if (!unorphanize(tree1, data[i])) {
249                              data[i].children = [];
250                              tree1.push(data[i]);
251                      }
252              }
253              else if (/^user/.test(data[i].id)) {
254                      if (!unorphanize(tree2, data[i])) {
255                              data[i].children = [];
256                              tree2.push(data[i]);
257                      }
258              }
259              else if (/^local_messages/.test(data[i].id)) {
260                      if (!unorphanize(tree3, data[i])) {
261                              data[i].children = [];
262                              tree3.push(data[i]);
263                      }
264              }
265
266      }
267     
268      return {folders: [ tree1, tree2, tree3 ]};
269
270  }
271
272});
273
274
275
276
277var BASE_PATH = '../prototype/';
278
279DataLayer.basePath = BASE_PATH + "REST.php?q=";
280DataLayer.dispatchPath = BASE_PATH;
281
282var selectedMessages = {};
283var allMessages = false;
284//list_container = container.find(".rule-list-container");
285/*
286var raster = function( html ){
287    container = $('body.expressomail-module-container').append( html ).find(".expresso-window-container");
288        list_container = container.find(".rule-list-container");
289        details_container = container.find(".rule-details-container");
290        vacation_container = container.find(".vacation-details-container");
291        form = container.find("form");
292    criterias = details_container.find( 'fieldset input[name="criteriaType[]"]' );
293        actions = details_container.find( 'fieldset input[name="actionType[]"]' );
294        nameObj = details_container.find( 'input[name="name"]' );
295        isExact = details_container.find( 'input[name="isExact"]' );
296    formatter();
297    container = container.dialog({
298            width:700,
299            modal: true,
300            closeOnEscape:true,
301            close:function(event, ui) {
302                    event.stopPropagation();
303                    list_container.removeClass('hidden');
304                    details_container.addClass('hidden');
305                    vacation_container.addClass('hidden');
306            },
307                open: function () {
308                        $(".ui-dialog .ui-dialog-titlebar")
309                        .append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>')
310                        .find('.ui-dialog-titlebar-minimize').click(function() {
311                                $(".ui-dialog-buttonpane, .ui-dialog-content").toggle();
312                                $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin');
313                        });
314                },
315            autoOpen: false
316    });
317    details_container.accordion({autoHeight: false});
318   
319    DataLayer.render( BASE_PATH + 'api/templates/folderselect.ejs', 'folder:select', function( html ){
320          details_container.find(".select-folderlist").append( html );
321    });
322
323
324    container.find(".button").button()
325   
326    .filter(".menu-filters > .button")
327
328    .click(function(){
329
330        container.dialog( 'close' );
331
332    })
333   
334    .filter(".cancel")
335   
336    .click(function(){
337
338        DataLayer.rollback( 'filter' );
339        return( false );
340
341    })
342   
343    .end().filter(".submit")
344   
345    .click(function(){
346
347        DataLayer.commit( 'filter' );
348        return( false );
349
350    });
351
352    details_container.find( ".menu-container" )
353
354        .find(".button.cancel").click(function(event){
355
356                details_container.accordion('activate',0);
357
358                showGridButton.removeClass('hidden');
359                grid.addClass('hidden').jqGrid('GridDestroy');
360         
361                list_container.removeClass('hidden');
362                details_container.addClass('hidden');
363
364                return( false );
365
366        }).end()
367        .find(".button.submit").click(function(event){
368
369                $(this).submit();
370
371                details_container.accordion('activate',0);
372
373                showGridButton.removeClass('hidden');
374                grid.addClass('hidden').jqGrid('GridDestroy');
375
376                list_container.removeClass('hidden');
377                details_container.addClass('hidden');
378
379                return( false );
380
381        }).end()
382        .find(".button.back").click(function(event){
383
384                details_container.accordion('activate',0);
385
386                return( false );
387
388        }).end()
389        .find(".button.forth").click(function(event){
390
391                details_container.accordion('activate',1);
392
393                return( false );
394
395        }).end()
396
397    //$( ".expresso-window-container .rule-details-container" ).accordion();
398    // var removeURL = new RegExp("^*.#");
399
400    // ------------------------------------------------------------
401    // ------------------------------------------------------------
402
403    //jqgrid
404    .end().find(".fields-search-messages .button.search")
405
406    .click(function(){
407
408                  var rule = DataLayer.form( form );
409                 
410                  showGridButton = $(this).parent();
411
412                  var connect = rule.isExact ? "AND" : "OR";
413
414                  var filter = $.map( rule.criteria, function( criteria, i ){
415
416                          if( i === 0 )
417                              return {"0": criteria.field, "1": criteria.operator, "2": criteria.value};
418                          else
419                              return {"0": connect,  "1": criteria.field, "2": criteria.operator, "3": criteria.value};
420                  });
421
422                  $.ajax( { 
423                            url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": filter} ),
424
425                            dataType: 'json',
426
427                            success: function(data){
428                             
429                                  allMessages = data;
430
431                                  grid = showGridButton.addClass('hidden')
432                                  .siblings(".fields-search-messages-grid, .fields-search-messages-grid-pager")
433                                  .removeClass('hidden').filter(".fields-search-messages-grid").jqGrid({
434
435                                          url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": [ "msgNumber", "IN", data ]} ),
436                                          datatype: "json",
437                                          mtype: 'GET',
438                                          colNames:['#', ' ', 'De', 'Assunto', 'Data', 'Tamanho'],
439                                          colModel:[
440                                                  {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false},
441                                                  {name:'flags',index:'msg_number', width:40, sortable:false, formatter:flags2Class},
442                                                  {name:'from.name',index:'msg_number', width:130, sortable:false},
443                                                  {name:'subject',index:'subject', width:250, sortable:false},
444                                                  {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time},
445                                                  {name:'size',index:'size', width:50, align:"right", sortable:false, formatter:bytes2Size}
446                                          ],
447                                          jsonReader : {
448                                                    root:"rows",
449                                                    page: "page",
450                                                    total: "total",
451                                                    records: "records",
452                                                    repeatitems: false,
453                                                    id: "0"
454                                          },
455                                          rowNum:10,
456                                          rowList:[10,25,50],
457                                          pager: '#fields-search-messages-grid-pager',
458                                          sortname: 'id',
459                                          viewrecords: true,
460                                          sortorder: "desc",
461                                          multiselect: true,
462                                          autowidth: true,
463                                          height:40,
464                                          loadComplete: function(data) {
465                      //                                // aplica o contador
466                      //                                jQuery('.timable').each(function (i) {
467                      //                                        jQuery(this).countdown({
468                      //                                                since: new Date(parseInt(this.title)),
469                      //                                                significant: 1,
470                      //                                                layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}',
471                      //                                                description: ' atr&aacute;s'
472                      //                                        });
473                      //                                });
474                                          },
475                                          onSelectRow: function (id, selected) {
476
477                                              if( selected )
478                                                  selectedMessages[ id ] = true;
479                                              else
480                                                  delete selectedMessages[ id ];
481
482                                          },
483                                          caption: 'Mensagens que atendem aos crit&eacute;rios'
484                                  });
485                            }
486                  } );
487
488                 
489    });
490
491    vacation_container.find( ".menu-container" )
492        .find(".button.back").click(function(event){
493
494                list_container.removeClass('hidden');
495                vacation_container.addClass('hidden');
496
497                return( false );
498
499        }).end()
500        .find(".button.submit").click(function(event){
501
502                $(this).submit();
503         
504                list_container.removeClass('hidden');
505                vacation_container.addClass('hidden');
506                return( false );
507        });
508
509}
510
511var reraster = function( html ){
512
513        //$(".rule-list-container").next().addClass("hidden");
514       
515        list_container.find( '.ui-widget' ).remove();
516
517        list_container.html( html ).find(".button").button();
518 
519        formatter();
520}
521
522var formatter = function(){
523
524    checkBoxes = container.find(".rule-list").selectable({
525                selecting: function(event, ui) {
526                        $(ui.selecting).find(':checkbox').attr('checked', true);
527                },
528                unselecting: function(event, ui) {
529                        $(ui.unselecting).find(':checkbox').attr('checked', false);
530                }
531    })
532    .find(':checkbox').change(function () {
533
534//      if ($(this).attr("checked"))
535//          $(this).parents('.rule').addClass('ui-selected');
536//      else
537            $(this).parents('.rule').toggleClass('ui-selected');
538
539    });
540
541    list_container.children()
542
543    .filter( ".fields-add" )
544
545        .find(".button.add").click(function(){
546
547                list_container.addClass('hidden');
548                details_container.removeClass('hidden');
549                form.get(0).reset();
550
551                return( false );
552        })
553        .filter(".vacation").click(function(){
554
555                details_container.addClass('hidden');
556                vacation_container.removeClass('hidden');
557                form.get(0).reset();
558
559                return( false );
560
561        }).end().end()
562
563    .end().filter( ".fields-selected-itens" )
564
565    .find(".button.enable").click(function(){
566
567            var values = [];
568     
569            checkBoxes.filter(':checked').parents(".rule-list").find('.title').each(function(){
570
571                values[ values.length ] = { id: this.innerHTML, enabled: true };
572
573            });
574
575            DataLayer.put( 'filter', values );
576
577    }).end()
578
579    .find(".button.disable").click(function(){
580     
581            var values = [];
582     
583            checkBoxes.filter(':checked').parents(".rule-list").find('.title').each(function(){
584
585                values[ values.length ] = { id: this.innerHTML, enabled: false };
586
587            });
588
589            DataLayer.put( 'filter', values );
590
591    }).end()
592
593    .find(".button.delete").click(function(){
594     
595            checkBoxes.filter(':checked').parents(".rule-list").find('.title').each(function(i, o){
596
597                 DataLayer.remove( 'filter', o.html() );
598
599            });
600
601    }).end()
602   
603
604    .end().find( ".menu-control .button" ).filter(".update").button({
605                icons: {
606                        primary: "ui-icon-pencil"
607                },
608                text: false
609        }).end()
610
611        .filter(".enable, .disable").click( function(event) {
612
613                var id = $(this).parents("li.rule").find('.title').html();
614
615                DataLayer.put( 'filter', id, { enabled: !$(this).is('.enable') } );
616        })
617
618        .filter(".enable").button({
619                icons: {
620                        primary: "ui-icon-circle-check"
621                },
622                text: false
623        }).end()
624
625        .filter(".disable").button({
626                icons: {
627                        primary: "ui-icon-circle-close"
628                },
629                text: false
630        }).end().end()
631       
632        .filter(".close").button({
633                icons: {
634                        primary: "ui-icon-close"
635                },
636                text: false
637        }).click( function(event) {
638                $(event.target)
639                .parents("li.rule").find('.title')
640                .each( function(){
641
642                    DataLayer.remove( 'filter', $(this).html() );
643
644                }).end().remove();
645        }).end()
646       
647        .filter(".update").click(function(event){
648
649                var id = ( event.target.href || event.target.parentNode.href ).replace( new RegExp("^.*#"), "" );
650
651                var data = DataLayer.get( 'filter', id );
652
653                if( id === "vacation" )
654                {
655                    $('[name="vacation"]').val( data.actions[0].parameter );
656
657                    list_container.addClass('hidden');
658                    vacation_container.removeClass('hidden');
659                    return;
660                }
661
662                showDetails( data );
663
664                list_container.addClass('hidden');
665                details_container.removeClass('hidden');
666        }).end()
667       
668        .removeClass('ui-button-icon-only');
669};
670// ------------------------------------------------------------
671// ------------------------------------------------------------   
672*/
673
674function block_user_email(email) {
675        //var id = "block_"+email;
676        var idd = email;
677       
678        var filters = DataLayer.get("filter", true);
679        for(var index in filters){
680                if(filters[index].name == email) {
681                        if(confirm("Esse usuário já está bloqueado! Deseja desbloquea-lo?")) {
682                                DataLayer.remove( 'filter', filters[index].id );
683                                DataLayer.commit("filter");
684                                $.Zebra_Dialog("Bloqueio do usuario " + email + " removido!");
685                                return true;
686                        }else
687                                return true;
688                }
689        }
690       
691        DataLayer.put( 'filter', idd,
692                                        { name: email, isExact: false,
693                                                criteria:{ 0: {value: email, operator: "=", field: "from"} },
694                                                /* To-do: Arrumar para popular a tela com o reject, pois não há essa opção na interface. */
695                                                actions: { 0: {parameter: "INBOX/Spam", type: "fileinto"}},
696                                                enabled: true,
697                                                id: email,
698                                                block: true
699                                        });
700       
701        DataLayer.commit("filter");
702        $.Zebra_Dialog("Usuário " + email + " bloqueado!");
703}
704
705function list_filters(html){
706        var filters = DataLayer.get("filter", true);
707        var outoffice_active = false;
708        var outoffice = false;
709        for(var index in filters){
710                DataLayer.put( 'filter', filters[index].id, { enabled: (filters[index].enabled == "true" ? true: false)});
711                if(filters[index].id == "vacation")
712                        outoffice = true;
713                if(filters[index].id == "vacation" && filters[index].enabled == "true"){
714                        write_msg(get_lang("Attention, you are in out of office mode."), true);
715                        outoffice_active = true;
716                        break;
717                }
718        }
719        DataLayer.commit( 'filter' );
720        if(!outoffice_active){
721                clean_msg();
722        }
723        if(html){
724                if( ! $(".filters-windows").length )
725                        container = $('body.expressomail-module-container').append("<div class='filters-windows'></div>").find(".filters-windows").html( html ).find(".expresso-window-container");
726                list_container = $('body.expressomail-module-container').find(".rule-list-container");
727        }
728        list_container = $(".expresso-window-filters").dialog({
729            width:700,
730            modal: true,
731                resizable: false,
732            closeOnEscape:true,
733            close:function(event, ui) {
734                    event.stopPropagation();
735                        if(list_container.find(".cancel").length)
736                                list_container.find(".cancel").trigger('click');       
737                        $(".dialog-head-buttonpane").hide();
738            },
739                open: function () {
740                        $(".ui-dialog .ui-dialog-titlebar")
741                        .append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>')
742                        .find('.ui-dialog-titlebar-minimize').click(function() {
743                                $(".ui-dialog-buttonpane, .ui-dialog-content").toggle();
744                                $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin');
745                        });
746                        $(".dialog-head-buttonpane").show();
747                },
748            autoOpen: false,
749                buttons: [{
750                        text : "Fechar",
751                        click : function() {
752                                $( this ).dialog( "close" );
753                        }
754                }]
755    });
756        $(".ui-dialog-titlebar").after("<div class='dialog-head-buttonpane ui-dialog-buttonpane ui-widget-content ui-helper-clearfix' style='background-color: rgb(224, 238, 238); '><div class='ui-dialog-buttonset header-buttonpane'></div></div>");
757        $(".dialog-head-buttonpane").css("padding", "5px").
758        find(".header-buttonpane").html("<a href='#' class='button add' title='Adicionar nova regra'>Nova regra</a>"+(!outoffice ? "<a href='#' class='button add vacation' title='Adicionar regra 'Fora do escritorio''>Fora do escritorio</a>" : "")).find(".button").button();
759       
760        $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE");
761        var list = DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', DataLayer.get("filter:detail", true));
762        list_container.html(list).find(".button").button();
763       
764        list_container.find(".rule-list").selectable({
765                selecting: function(event, ui) {
766                        $(ui.selecting).find(':checkbox').attr('checked', true);
767                },
768                unselecting: function(event, ui) {
769                        $(ui.unselecting).find(':checkbox').attr('checked', false);
770                }
771        });
772       
773        list_container.find( ".menu-control .button" ).filter(".update").button({
774                icons: {
775                        primary: "ui-icon-pencil"
776                },
777                text: false
778        }).click(function(){
779                var id = $(this).parents("li.rule").find('.id').val();
780                var filters = DataLayer.get( 'filter', true);
781                for(var i =0; i < filters.length; i++){
782                        if(filters[i].id == id){
783                                filters = filters[i];
784                                break;
785                        }       
786                }
787                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true)},function(html){
788                        var details_container = $(".expresso-window-filters").html(html);
789                        if(filters.name != "vacation"){
790                                form = container.find("form");
791                                criterias = details_container.find( 'fieldset input[name="criteriaType[]"]' );
792                                actions = details_container.find( 'fieldset input[name="actionType[]"]' );
793                                nameObj = details_container.find( 'input[name="name"]' );
794                                isExact = details_container.find( 'input[name="isExact"]' );
795                                showDetails(filters);
796                                var accord = list_container.find(".rule-details-container").accordion({autoHeight: false});
797                                list_container.find(".button").button().filter(".forth").click(function(){
798                                        accord.accordion('activate',1);
799                                }).end().filter(".back").click(function(){
800                                        accord.accordion('activate',0);
801                                }).end().filter(".cancel").click(function(){
802                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
803                                }).end().filter(".submit").click(function(){
804                                        if(nameObj)
805                                                nameObj.attr("disabled", "false");
806                                        if(valid_save())
807                                                $(this).submit();
808                                        else
809                                                return;
810                                        DataLayer.commit( 'filter', false,function(){
811                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
812                                        });
813                                });
814                        }else{
815                                list_container.find(".vacation-details-container").removeClass("hidden");
816                                list_container.find(".rule-details-container").addClass("hidden");
817                                list_container.find(".button").button().filter(".back").click(function(){
818                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
819                                }).end().filter(".submit").click(function(){
820                                        $(this).submit();
821                                        DataLayer.commit( 'filter', false,function(){
822                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
823                                        });
824                                });
825                                details_container.find('[name="vacation"]').val(filters.actions[0].parameter);
826                        }
827                });
828        }).end()
829        .filter(".enable").button({
830                icons: {
831                        primary: "ui-icon-circle-close"
832                },
833                text: false
834        }).click(function(){
835                var id = $(this).parents("li.rule").find('.id').val();
836                DataLayer.put( 'filter', id, { enabled: false  });
837                DataLayer.commit("filter", false,function(){
838                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
839                });
840        }).end()
841
842        .filter(".disable").button({
843                icons: {
844                        primary: "ui-icon-circle-check"
845                },
846                text: false
847        }).click(function(){
848                var id = $(this).parents("li.rule").find('.id').val();
849                DataLayer.put( 'filter', id, { enabled: true });
850                DataLayer.commit("filter", false,function(){
851                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
852                });
853        }).end()
854       
855        .filter(".close").button({
856                icons: {
857                        primary: "ui-icon-close"
858                },
859                text: false
860        }).click(function(event){
861                var filter_name = $(event.target).parents("li.rule").find('.id').val();
862                $.Zebra_Dialog("Deseja realmente excluir o filtro : <strong>"+filter_name+"</strong>",{
863                        'type':     'question',
864                        'title':    'Confirmação de Exclusão',
865                        'buttons':  [get_lang('Yes'), get_lang('No')],
866                        'onClose':  function(caption) {
867                                if(caption == get_lang('Yes')){
868                                        DataLayer.remove( 'filter', filter_name);
869                                        DataLayer.commit("filter", false,function(){
870                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
871                                        });
872                                }else{
873                                        $(event.target).removeClass("ui-selected").parent().removeClass("ui-selected");
874                                }
875                        }
876                });
877        }).end().removeClass("ui-button-icon-only");
878       
879        list_container.parent().find(".button.add:first").click(function(){
880                list_container.parent().find(".dialog-head-buttonpane").addClass("hidden");
881                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true)},function(html){
882                        list_container.html(html);
883                        var accord = list_container.find(".rule-details-container").accordion({autoHeight: false});
884                        list_container.find(".button").button().filter(".forth").click(function(){
885                                accord.accordion('activate',1);
886                        }).end().filter(".back").click(function(){
887                                accord.accordion('activate',0);
888                        }).end().filter(".cancel").click(function(){
889                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
890                        }).end().filter(".submit").click(function(){
891                                if(valid_save())
892                                        $(this).submit();
893                                else
894                                        return;
895                                DataLayer.commit( 'filter',false,function(){
896                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
897                                });
898                        });
899                });     
900        });
901        list_container.parent().find(".button.add.vacation").click(function(){
902                list_container.parent().find(".dialog-head-buttonpane").addClass("hidden");
903                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true)},function(html){
904                        list_container.html(html);
905                        list_container.find(".vacation-details-container").removeClass("hidden");
906                        list_container.find(".rule-details-container").addClass("hidden");
907                        list_container.find(".button").button().filter(".back").click(function(){
908                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
909                        }).end().filter(".submit").click(function(){
910                                $(this).submit();
911                                DataLayer.commit( 'filter',false,function(){
912                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
913                                });
914                        });
915                });     
916        });
917}
918
919DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
Note: See TracBrowser for help on using the repository browser.