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

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