plugins: reworked the framework using inheritance + added active_filters
[myslice.git] / plugins / active_filters / active_filters.js
diff --git a/plugins/active_filters/active_filters.js b/plugins/active_filters/active_filters.js
new file mode 100644 (file)
index 0000000..792c6e9
--- /dev/null
@@ -0,0 +1,92 @@
+/**
+ * Description: ActiveFilters plugin
+ * Copyright (c) 2012-2013 UPMC Sorbonne Universite
+ * License: GPLv3
+ */
+
+(function($){
+
+    var ActiveFilters = Plugin.extend({
+
+        init: function(options, element) {
+            this._super(options, element);
+
+            this.listen_query(options.query_uuid);
+
+            $("#clearFilters").click(function () {
+                manifold.raise_event(options.query_uuid, CLEAR_FILTERS);
+            });
+        },
+
+        // This should be provided in the API
+        // make_id_from_filter, etc
+        getOperatorLabel: function(op)
+        {
+            if (op == "=" || op == "==") {
+                return 'eq';
+            } else if (op == "!=") {
+                return "ne";
+            } else if (op == ">") {
+                return "gt";
+            } else if (op == ">=") {
+                return "ge";
+            } else if (op == "<") {
+                return "lt";
+            } else if (op == "<=") {
+                return "le";
+            } else {
+                return false;
+            }
+        },
+
+        // Visual actions on the component
+
+        clear_filters: function() {
+            $("#clearFilters").hide();
+        },
+
+        on_filter_added: function(filter) {
+            var key    = filter[0];
+            var op     = filter[1];
+            var value  = filter[2];
+            var op_str = this.getOperatorLabel(op);
+            var id     = 'filter_' + key + "_" + op_str;
+
+            // Add a button for a filter            
+            $('#myActiveFilters').append("<div id='" + id + "' class='filterButton' style='float:left;margin-bottom:10px;'/>");
+            $('#' + id).append(key + op + value);
+
+            // Add a close button to remove the filter
+            $('#' + id).append("<img id='close-" + id + "' src='/all-static/img/details_close.png' class='closeButton' style='padding-left:3px;'/>");
+            // Add an event on click on the close button, call function removeFilter
+            $('#close-' + id).click(function(event) {
+                manifold.raise_event(options.query_uuid, FILTER_REMOVED, filter);
+            });
+            // If there are active filters, then show the clear filters button
+            $("#clearFilters").show();
+        },
+
+        on_filter_removed: function(filter) {
+            var key    = filter[0];
+            var op     = filter[1];
+            var value  = filter[2];
+            var op_str = this.getOperatorLabel(op);
+            var id     = 'filter_' + key + "_" + op_str;
+
+            $('#' + id).remove()
+            // Count the number of filter _inside_ the current plugin
+            count = $('.filterButton', $('#myActiveFilters')).length;
+            if (count == 0) {
+                jQuery("#clearFilters").hide();
+            }
+        },
+
+        on_filter_clear: function(filter) {
+            $("#clearFilters").hide();
+
+        },
+    });
+
+    $.plugin('ActiveFilters', ActiveFilters);
+
+})(jQuery);