2 * TestbedsPlugin: List of testbeds plugin
4 * Description: TODO -> generalize to a list of possible filters
5 * This file is part of the Manifold project
6 * Requires: js/plugin.js
7 * URL: http://www.myslice.info
8 * Author: Loïc Baron <loic.baron@lip6.fr>
9 * Copyright: Copyright 2012-2013 UPMC Sorbonne Universités
15 var FilterStatusPlugin = Plugin.extend({
18 * @brief Plugin constructor
19 * @param options : an associative array of setting values
21 * @return : a jQuery collection of objects on which the plugin is
22 * applied, which allows to maintain chainability of calls
24 init: function(options, element)
26 // Call the parent constructor, see FAQ when forgotten
27 this._super(options, element);
29 /* Setup query and record handlers */
30 this.listen_query(options.query_uuid);
32 /* Setup click handlers */
33 this.elts('list-group-item').click({'instance': this}, this._on_click);
35 this.prev_filter_status = null;
38 /**************************************************************************
40 **************************************************************************/
42 select_tab: function(tab)
44 this.elts('list-group-item').removeClass('active');
45 this.elmt(tab).addClass('active');
48 /**************************************************************************
50 **************************************************************************/
52 // These functions are here to react on external filters, which we don't
55 on_filter_added: function(filter) {
59 on_filter_removed: function(filter) {
63 /**************************************************************************
65 **************************************************************************/
68 * @brief : Click event handler
70 _on_click: function(e)
75 // A pointer to the plugin instance, since 'this' is overriden here
76 self = e.data.instance;
80 filter_status = this.dataset['status'];
81 self.select_tab(filter_status);
83 // ... and communicate the appropriate filters to the manager
84 // NOTE: we use the manifold namespace for internal filters
85 if (self.prev_filter_status)
86 manifold.raise_event(self.options.query_uuid, FILTER_REMOVED, self.prev_filter_status);
88 // XXX The datatables will be refreshed twice !
89 if (filter_status != 'all') {
90 // No filter for 'all'
91 var filter = ['manifold:status', '==', filter_status];
92 manifold.raise_event(self.options.query_uuid, FILTER_ADDED, filter);
95 self.prev_filter_status = filter_status;
100 /* Plugin registration */
101 $.plugin('FilterStatusPlugin', FilterStatusPlugin);