792c6e95703cbbac9896443b9f4e71c7d32c7925
[myslice.git] / plugins / active_filters / active_filters.js
1 /**
2  * Description: ActiveFilters plugin
3  * Copyright (c) 2012-2013 UPMC Sorbonne Universite
4  * License: GPLv3
5  */
6
7 (function($){
8
9     var ActiveFilters = Plugin.extend({
10
11         init: function(options, element) {
12             this._super(options, element);
13
14             this.listen_query(options.query_uuid);
15
16             $("#clearFilters").click(function () {
17                 manifold.raise_event(options.query_uuid, CLEAR_FILTERS);
18             });
19         },
20
21         // This should be provided in the API
22         // make_id_from_filter, etc
23         getOperatorLabel: function(op)
24         {
25             if (op == "=" || op == "==") {
26                 return 'eq';
27             } else if (op == "!=") {
28                 return "ne";
29             } else if (op == ">") {
30                 return "gt";
31             } else if (op == ">=") {
32                 return "ge";
33             } else if (op == "<") {
34                 return "lt";
35             } else if (op == "<=") {
36                 return "le";
37             } else {
38                 return false;
39             }
40         },
41
42         // Visual actions on the component
43
44         clear_filters: function() {
45             $("#clearFilters").hide();
46         },
47
48         on_filter_added: function(filter) {
49             var key    = filter[0];
50             var op     = filter[1];
51             var value  = filter[2];
52             var op_str = this.getOperatorLabel(op);
53             var id     = 'filter_' + key + "_" + op_str;
54
55             // Add a button for a filter            
56             $('#myActiveFilters').append("<div id='" + id + "' class='filterButton' style='float:left;margin-bottom:10px;'/>");
57             $('#' + id).append(key + op + value);
58
59             // Add a close button to remove the filter
60             $('#' + id).append("<img id='close-" + id + "' src='/all-static/img/details_close.png' class='closeButton' style='padding-left:3px;'/>");
61             // Add an event on click on the close button, call function removeFilter
62             $('#close-' + id).click(function(event) {
63                 manifold.raise_event(options.query_uuid, FILTER_REMOVED, filter);
64             });
65             // If there are active filters, then show the clear filters button
66             $("#clearFilters").show();
67         },
68
69         on_filter_removed: function(filter) {
70             var key    = filter[0];
71             var op     = filter[1];
72             var value  = filter[2];
73             var op_str = this.getOperatorLabel(op);
74             var id     = 'filter_' + key + "_" + op_str;
75
76             $('#' + id).remove()
77             // Count the number of filter _inside_ the current plugin
78             count = $('.filterButton', $('#myActiveFilters')).length;
79             if (count == 0) {
80                 jQuery("#clearFilters").hide();
81             }
82         },
83
84         on_filter_clear: function(filter) {
85             $("#clearFilters").hide();
86
87         },
88     });
89
90     $.plugin('ActiveFilters', ActiveFilters);
91
92 })(jQuery);