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

Revision 5627, 24.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    }
122 
123    //isExact.val( filter.isExact != "false"? "and" : "or" );
124        isExact.filter('[value="'+(filter.isExact != "false"? "and" : "or")+'"]').attr("checked", "True");
125}
126
127/* --- ------ --- */
128
129DataLayer.codec( "filter", "detail", {
130 
131  decoder: function( form ){
132      if( form.vacation )
133          return {
134
135                criteria: [{ value: "vacation", operator: "", field: "vacation" }],
136                actions: [{ parameter: form.vacation, type: "vacation" }],
137                id: "vacation",
138                name: "vacation",
139                isExact: false,
140                applyMessages : "",
141                enabled : false
142      }
143
144      var haha = {
145                //id: form.name,
146                name: form.name ? form.name : nameObj.val(),
147                isExact: ( form.isExact === "and" ),
148                criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){ 
149                        return (!form.criteriaValue[i]) ? null:
150                                {value:  form.criteriaValue[i],
151                                  operator: criteriaOperator,
152                                  field:  form.criteriaType[i]};
153
154                }),
155                actions: $.map( form.actionType || [], function( type, i ){
156                        var the_parameter = form.actionParameter[i];
157                       
158                        !the_parameter ? the_parameter = form.actionParameter[i+1] : "";
159                        if (type == 'fileinto') {
160                                the_parameter = form.valueFileInto;
161                        }
162                        if (type == 'reject') {
163                                the_parameter = form.messageReject;
164                        }
165                        if (type == 'fileintoInbox') {
166                                if(!$('[value="fileintoInbox"]').parent().hasClass("hidden")){
167                                        type = 'fileinto';
168                                        the_parameter = 'INBOX';
169                                }else{
170                                        return;
171                                }
172                        }
173                        if (type == 'fileintoTrash') {
174                                type = 'fileinto';
175                                the_parameter = 'INBOX/Trash';
176                        }
177                        if (type == 'redirect') {
178                                the_parameter = form.addressRedirect;
179                        }
180                        if (type == 'setflag') {
181                                the_parameter = form.valueSetFlag;
182                        }
183                       
184                        return (!type) ? null:
185                              {parameter: the_parameter, type: type };
186
187                }),
188                enabled : false,
189                applyMessages: allMessages? !$.isEmptyObject( selectedMessages ) ?
190                keys( selectedMessages ) : allMessages : ""
191               
192      };
193          return haha;
194      //        'vacation' => ""
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
249var BASE_PATH = '../prototype/';
250
251DataLayer.basePath = BASE_PATH + "REST.php?q=";
252DataLayer.dispatchPath = BASE_PATH;
253
254var selectedMessages = {};
255var allMessages = false;
256//list_container = container.find(".rule-list-container");
257/*
258var raster = function( html ){
259    container = $('body.expressomail-module-container').append( html ).find(".expresso-window-container");
260        list_container = container.find(".rule-list-container");
261        details_container = container.find(".rule-details-container");
262        vacation_container = container.find(".vacation-details-container");
263        form = container.find("form");
264    criterias = details_container.find( 'fieldset input[name="criteriaType[]"]' );
265        actions = details_container.find( 'fieldset input[name="actionType[]"]' );
266        nameObj = details_container.find( 'input[name="name"]' );
267        isExact = details_container.find( 'input[name="isExact"]' );
268    formatter();
269    container = container.dialog({
270            width:700,
271            modal: true,
272            closeOnEscape:true,
273            close:function(event, ui) {
274                    event.stopPropagation();
275                    list_container.removeClass('hidden');
276                    details_container.addClass('hidden');
277                    vacation_container.addClass('hidden');
278            },
279                open: function () {
280                        $(".ui-dialog .ui-dialog-titlebar")
281                        .append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>')
282                        .find('.ui-dialog-titlebar-minimize').click(function() {
283                                $(".ui-dialog-buttonpane, .ui-dialog-content").toggle();
284                                $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin');
285                        });
286                },
287            autoOpen: false
288    });
289    details_container.accordion({autoHeight: false});
290   
291    DataLayer.render( BASE_PATH + 'api/templates/folderselect.ejs', 'folder:select', function( html ){
292          details_container.find(".select-folderlist").append( html );
293    });
294
295
296    container.find(".button").button()
297   
298    .filter(".menu-filters > .button")
299
300    .click(function(){
301
302        container.dialog( 'close' );
303
304    })
305   
306    .filter(".cancel")
307   
308    .click(function(){
309
310        DataLayer.rollback( 'filter' );
311        return( false );
312
313    })
314   
315    .end().filter(".submit")
316   
317    .click(function(){
318
319        DataLayer.commit( 'filter' );
320        return( false );
321
322    });
323
324    details_container.find( ".menu-container" )
325
326        .find(".button.cancel").click(function(event){
327
328                details_container.accordion('activate',0);
329
330                showGridButton.removeClass('hidden');
331                grid.addClass('hidden').jqGrid('GridDestroy');
332         
333                list_container.removeClass('hidden');
334                details_container.addClass('hidden');
335
336                return( false );
337
338        }).end()
339        .find(".button.submit").click(function(event){
340
341                $(this).submit();
342
343                details_container.accordion('activate',0);
344
345                showGridButton.removeClass('hidden');
346                grid.addClass('hidden').jqGrid('GridDestroy');
347
348                list_container.removeClass('hidden');
349                details_container.addClass('hidden');
350
351                return( false );
352
353        }).end()
354        .find(".button.back").click(function(event){
355
356                details_container.accordion('activate',0);
357
358                return( false );
359
360        }).end()
361        .find(".button.forth").click(function(event){
362
363                details_container.accordion('activate',1);
364
365                return( false );
366
367        }).end()
368
369    //$( ".expresso-window-container .rule-details-container" ).accordion();
370    // var removeURL = new RegExp("^*.#");
371
372    // ------------------------------------------------------------
373    // ------------------------------------------------------------
374
375    //jqgrid
376    .end().find(".fields-search-messages .button.search")
377
378    .click(function(){
379
380                  var rule = DataLayer.form( form );
381                 
382                  showGridButton = $(this).parent();
383
384                  var connect = rule.isExact ? "AND" : "OR";
385
386                  var filter = $.map( rule.criteria, function( criteria, i ){
387
388                          if( i === 0 )
389                              return {"0": criteria.field, "1": criteria.operator, "2": criteria.value};
390                          else
391                              return {"0": connect,  "1": criteria.field, "2": criteria.operator, "3": criteria.value};
392                  });
393
394                  $.ajax( { 
395                            url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": filter} ),
396
397                            dataType: 'json',
398
399                            success: function(data){
400                             
401                                  allMessages = data;
402
403                                  grid = showGridButton.addClass('hidden')
404                                  .siblings(".fields-search-messages-grid, .fields-search-messages-grid-pager")
405                                  .removeClass('hidden').filter(".fields-search-messages-grid").jqGrid({
406
407                                          url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": [ "msgNumber", "IN", data ]} ),
408                                          datatype: "json",
409                                          mtype: 'GET',
410                                          colNames:['#', ' ', 'De', 'Assunto', 'Data', 'Tamanho'],
411                                          colModel:[
412                                                  {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false},
413                                                  {name:'flags',index:'msg_number', width:40, sortable:false, formatter:flags2Class},
414                                                  {name:'from.name',index:'msg_number', width:130, sortable:false},
415                                                  {name:'subject',index:'subject', width:250, sortable:false},
416                                                  {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time},
417                                                  {name:'size',index:'size', width:50, align:"right", sortable:false, formatter:bytes2Size}
418                                          ],
419                                          jsonReader : {
420                                                    root:"rows",
421                                                    page: "page",
422                                                    total: "total",
423                                                    records: "records",
424                                                    repeatitems: false,
425                                                    id: "0"
426                                          },
427                                          rowNum:10,
428                                          rowList:[10,25,50],
429                                          pager: '#fields-search-messages-grid-pager',
430                                          sortname: 'id',
431                                          viewrecords: true,
432                                          sortorder: "desc",
433                                          multiselect: true,
434                                          autowidth: true,
435                                          height:40,
436                                          loadComplete: function(data) {
437                      //                                // aplica o contador
438                      //                                jQuery('.timable').each(function (i) {
439                      //                                        jQuery(this).countdown({
440                      //                                                since: new Date(parseInt(this.title)),
441                      //                                                significant: 1,
442                      //                                                layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}',
443                      //                                                description: ' atr&aacute;s'
444                      //                                        });
445                      //                                });
446                                          },
447                                          onSelectRow: function (id, selected) {
448
449                                              if( selected )
450                                                  selectedMessages[ id ] = true;
451                                              else
452                                                  delete selectedMessages[ id ];
453
454                                          },
455                                          caption: 'Mensagens que atendem aos crit&eacute;rios'
456                                  });
457                            }
458                  } );
459
460                 
461    });
462
463    vacation_container.find( ".menu-container" )
464        .find(".button.back").click(function(event){
465
466                list_container.removeClass('hidden');
467                vacation_container.addClass('hidden');
468
469                return( false );
470
471        }).end()
472        .find(".button.submit").click(function(event){
473
474                $(this).submit();
475         
476                list_container.removeClass('hidden');
477                vacation_container.addClass('hidden');
478                return( false );
479        });
480
481}
482
483var reraster = function( html ){
484
485        //$(".rule-list-container").next().addClass("hidden");
486       
487        list_container.find( '.ui-widget' ).remove();
488
489        list_container.html( html ).find(".button").button();
490 
491        formatter();
492}
493
494var formatter = function(){
495
496    checkBoxes = container.find(".rule-list").selectable({
497                selecting: function(event, ui) {
498                        $(ui.selecting).find(':checkbox').attr('checked', true);
499                },
500                unselecting: function(event, ui) {
501                        $(ui.unselecting).find(':checkbox').attr('checked', false);
502                }
503    })
504    .find(':checkbox').change(function () {
505
506//      if ($(this).attr("checked"))
507//          $(this).parents('.rule').addClass('ui-selected');
508//      else
509            $(this).parents('.rule').toggleClass('ui-selected');
510
511    });
512
513    list_container.children()
514
515    .filter( ".fields-add" )
516
517        .find(".button.add").click(function(){
518
519                list_container.addClass('hidden');
520                details_container.removeClass('hidden');
521                form.get(0).reset();
522
523                return( false );
524        })
525        .filter(".vacation").click(function(){
526
527                details_container.addClass('hidden');
528                vacation_container.removeClass('hidden');
529                form.get(0).reset();
530
531                return( false );
532
533        }).end().end()
534
535    .end().filter( ".fields-selected-itens" )
536
537    .find(".button.enable").click(function(){
538
539            var values = [];
540     
541            checkBoxes.filter(':checked').parents(".rule-list").find('.title').each(function(){
542
543                values[ values.length ] = { id: this.innerHTML, enabled: true };
544
545            });
546
547            DataLayer.put( 'filter', values );
548
549    }).end()
550
551    .find(".button.disable").click(function(){
552     
553            var values = [];
554     
555            checkBoxes.filter(':checked').parents(".rule-list").find('.title').each(function(){
556
557                values[ values.length ] = { id: this.innerHTML, enabled: false };
558
559            });
560
561            DataLayer.put( 'filter', values );
562
563    }).end()
564
565    .find(".button.delete").click(function(){
566     
567            checkBoxes.filter(':checked').parents(".rule-list").find('.title').each(function(i, o){
568
569                 DataLayer.remove( 'filter', o.html() );
570
571            });
572
573    }).end()
574   
575
576    .end().find( ".menu-control .button" ).filter(".update").button({
577                icons: {
578                        primary: "ui-icon-pencil"
579                },
580                text: false
581        }).end()
582
583        .filter(".enable, .disable").click( function(event) {
584
585                var id = $(this).parents("li.rule").find('.title').html();
586
587                DataLayer.put( 'filter', id, { enabled: !$(this).is('.enable') } );
588        })
589
590        .filter(".enable").button({
591                icons: {
592                        primary: "ui-icon-circle-check"
593                },
594                text: false
595        }).end()
596
597        .filter(".disable").button({
598                icons: {
599                        primary: "ui-icon-circle-close"
600                },
601                text: false
602        }).end().end()
603       
604        .filter(".close").button({
605                icons: {
606                        primary: "ui-icon-close"
607                },
608                text: false
609        }).click( function(event) {
610                $(event.target)
611                .parents("li.rule").find('.title')
612                .each( function(){
613
614                    DataLayer.remove( 'filter', $(this).html() );
615
616                }).end().remove();
617        }).end()
618       
619        .filter(".update").click(function(event){
620
621                var id = ( event.target.href || event.target.parentNode.href ).replace( new RegExp("^.*#"), "" );
622
623                var data = DataLayer.get( 'filter', id );
624
625                if( id === "vacation" )
626                {
627                    $('[name="vacation"]').val( data.actions[0].parameter );
628
629                    list_container.addClass('hidden');
630                    vacation_container.removeClass('hidden');
631                    return;
632                }
633
634                showDetails( data );
635
636                list_container.addClass('hidden');
637                details_container.removeClass('hidden');
638        }).end()
639       
640        .removeClass('ui-button-icon-only');
641};
642// ------------------------------------------------------------
643// ------------------------------------------------------------   
644*/
645function list_filters(html){
646        var filters = DataLayer.get("filter", true);
647        var outoffice_active = false;
648        var outoffice = false;
649        for(var index in filters){
650                DataLayer.put( 'filter', filters[index].id, { enabled: (filters[index].enabled == "true" ? true: false)});
651                if(filters[index].id == "vacation")
652                        outoffice = true;
653                if(filters[index].id == "vacation" && filters[index].enabled == "true"){
654                        write_msg(get_lang("Attention, you are in out of office mode."), true);
655                        outoffice_active = true;
656                        break;
657                }
658        }
659        DataLayer.commit( 'filter' );
660        if(!outoffice_active){
661                clean_msg();
662        }
663        if(html){
664                if( ! $(".filters-windows").length )
665                        container = $('body.expressomail-module-container').append("<div class='filters-windows'></div>").find(".filters-windows").html( html ).find(".expresso-window-container");
666                list_container = $('body.expressomail-module-container').find(".rule-list-container");
667        }
668        list_container = $(".expresso-window-filters").dialog({
669            width:700,
670            modal: true,
671                resizable: false,
672            closeOnEscape:true,
673            close:function(event, ui) {
674                    event.stopPropagation();
675                        if(list_container.find(".cancel").length)
676                                list_container.find(".cancel").trigger('click');       
677                        $(".dialog-head-buttonpane").hide();
678            },
679                open: function () {
680                        $(".ui-dialog .ui-dialog-titlebar")
681                        .append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>')
682                        .find('.ui-dialog-titlebar-minimize').click(function() {
683                                $(".ui-dialog-buttonpane, .ui-dialog-content").toggle();
684                                $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin');
685                        });
686                        $(".dialog-head-buttonpane").show();
687                },
688            autoOpen: false,
689                buttons: [{
690                        text : "Fechar",
691                        click : function() {
692                                $( this ).dialog( "close" );
693                        }
694                }]
695    });
696        $(".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>");
697        $(".dialog-head-buttonpane").css("padding", "5px").
698        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();
699       
700        $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE");
701        var list = DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', DataLayer.get("filter:detail", true));
702        list_container.html(list).find(".button").button();
703       
704        list_container.find(".rule-list").selectable({
705                selecting: function(event, ui) {
706                        $(ui.selecting).find(':checkbox').attr('checked', true);
707                },
708                unselecting: function(event, ui) {
709                        $(ui.unselecting).find(':checkbox').attr('checked', false);
710                }
711        });
712       
713        list_container.find( ".menu-control .button" ).filter(".update").button({
714                icons: {
715                        primary: "ui-icon-pencil"
716                },
717                text: false
718        }).click(function(){
719                var id = $(this).parents("li.rule").find('.id').val();
720                var filters = DataLayer.get( 'filter', true);
721                for(var i =0; i < filters.length; i++){
722                        if(filters[i].id == id){
723                                filters = filters[i];
724                                break;
725                        }       
726                }
727                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true)},function(html){
728                        var details_container = $(".expresso-window-filters").html(html);
729                        if(filters.name != "vacation"){
730                                form = container.find("form");
731                                criterias = details_container.find( 'fieldset input[name="criteriaType[]"]' );
732                                actions = details_container.find( 'fieldset input[name="actionType[]"]' );
733                                nameObj = details_container.find( 'input[name="name"]' );
734                                isExact = details_container.find( 'input[name="isExact"]' );
735                                showDetails(filters);
736                                var accord = list_container.find(".rule-details-container").accordion({autoHeight: false});
737                                list_container.find(".button").button().filter(".forth").click(function(){
738                                        accord.accordion('activate',1);
739                                }).end().filter(".back").click(function(){
740                                        accord.accordion('activate',0);
741                                }).end().filter(".cancel").click(function(){
742                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
743                                }).end().filter(".submit").click(function(){
744                                        if(nameObj)
745                                                nameObj.attr("disabled", "false");
746                                        if(valid_save())
747                                                $(this).submit();
748                                        else
749                                                return;
750                                        DataLayer.commit( 'filter' );
751                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
752                                });
753                        }else{
754                                list_container.find(".vacation-details-container").removeClass("hidden");
755                                list_container.find(".rule-details-container").addClass("hidden");
756                                list_container.find(".button").button().filter(".back").click(function(){
757                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
758                                }).end().filter(".submit").click(function(){
759                                        $(this).submit();
760                                        DataLayer.commit( 'filter' );
761                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
762                                });
763                                details_container.find('[name="vacation"]').val(filters.actions[0].parameter);
764                        }
765                });
766        }).end()
767        .filter(".enable").button({
768                icons: {
769                        primary: "ui-icon-circle-check"
770                },
771                text: false
772        }).click(function(){
773                var id = $(this).parents("li.rule").find('.id').val();
774                DataLayer.put( 'filter', id, { enabled: false  });
775                DataLayer.commit("filter", false,function(){
776                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
777                });
778        }).end()
779
780        .filter(".disable").button({
781                icons: {
782                        primary: "ui-icon-circle-close"
783                },
784                text: false
785        }).click(function(){
786                var id = $(this).parents("li.rule").find('.id').val();
787                DataLayer.put( 'filter', id, { enabled: true });
788                DataLayer.commit("filter", false,function(){
789                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
790                });
791        }).end()
792       
793        .filter(".close").button({
794                icons: {
795                        primary: "ui-icon-close"
796                },
797                text: false
798        }).click(function(){
799                $(event.target)
800                .parents("li.rule").find('.id')
801                .each( function(){
802                        DataLayer.remove( 'filter', $(this).val() );
803                });
804                DataLayer.commit("filter", false,function(){
805                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
806                });
807        }).end().removeClass("ui-button-icon-only");
808       
809        list_container.parent().find(".button.add:first").click(function(){
810                list_container.parent().find(".dialog-head-buttonpane").addClass("hidden");
811                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true)},function(html){
812                        list_container.html(html);
813                        var accord = list_container.find(".rule-details-container").accordion({autoHeight: false});
814                        list_container.find(".button").button().filter(".forth").click(function(){
815                                accord.accordion('activate',1);
816                        }).end().filter(".back").click(function(){
817                                accord.accordion('activate',0);
818                        }).end().filter(".cancel").click(function(){
819                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
820                        }).end().filter(".submit").click(function(){
821                                if(valid_save())
822                                        $(this).submit();
823                                else
824                                        return;
825                                DataLayer.commit( 'filter',false,function(){
826                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
827                                });
828                        });
829                });     
830        });
831        list_container.parent().find(".button.add.vacation").click(function(){
832                list_container.parent().find(".dialog-head-buttonpane").addClass("hidden");
833                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true)},function(html){
834                        list_container.html(html);
835                        list_container.find(".vacation-details-container").removeClass("hidden");
836                        list_container.find(".rule-details-container").addClass("hidden");
837                        list_container.find(".button").button().filter(".back").click(function(){
838                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
839                        }).end().filter(".submit").click(function(){
840                                $(this).submit();
841                                DataLayer.commit( 'filter',false,function(){
842                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
843                                });
844                        });
845                });     
846        });
847}
848
849DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
Note: See TracBrowser for help on using the repository browser.