31 # union not yet supported |
31 # union not yet supported |
32 if len(rqlst.children) != 1: |
32 if len(rqlst.children) != 1: |
33 return () |
33 return () |
34 rqlst.save_state() |
34 rqlst.save_state() |
35 mainvar, baserql = prepare_facets_rqlst(rqlst, self.rset.args) |
35 mainvar, baserql = prepare_facets_rqlst(rqlst, self.rset.args) |
36 facets = [facet for facet in self.vreg.possible_vobjects( |
36 wdgs = [facet.get_widget() for facet in self.vreg.possible_vobjects( |
37 'facets', self.req, self.rset, context='tablefilter', |
37 'facets', self.req, self.rset, context='tablefilter', |
38 filtered_variable=mainvar) |
38 filtered_variable=mainvar)] |
39 if facet.get_widget()] |
39 wdgs = [wdg for wdg in wdgs if wdg is not None] |
40 rqlst.recover() |
40 rqlst.recover() |
41 if facets: |
41 if wdgs: |
42 self._generate_form(divid, baserql, facets, hidden, |
42 self._generate_form(divid, baserql, wdgs, hidden, |
43 vidargs={'displaycols': displaycols, |
43 vidargs={'displaycols': displaycols, |
44 'displayactions': displayactions, |
44 'displayactions': displayactions, |
45 'displayfilter': displayfilter}) |
45 'displayfilter': displayfilter}) |
46 return self.show_hide_actions(divid, not hidden) |
46 return self.show_hide_actions(divid, not hidden) |
47 return () |
47 return () |
48 |
48 |
49 def _generate_form(self, divid, baserql, facets, hidden=True, vidargs={}): |
49 def _generate_form(self, divid, baserql, fwidgets, hidden=True, vidargs={}): |
50 """display a form to filter table's content. This should only |
50 """display a form to filter table's content. This should only |
51 occurs when a context eid is given |
51 occurs when a context eid is given |
52 """ |
52 """ |
53 wdgs = [facet.get_widget() for facet in facets] |
|
54 if not wdgs: |
|
55 return |
|
56 self.req.add_js( ('cubicweb.ajax.js', 'cubicweb.formfilter.js')) |
53 self.req.add_js( ('cubicweb.ajax.js', 'cubicweb.formfilter.js')) |
57 # drop False / None values from vidargs |
54 # drop False / None values from vidargs |
58 vidargs = dict((k, v) for k, v in vidargs.iteritems() if v) |
55 vidargs = dict((k, v) for k, v in vidargs.iteritems() if v) |
59 self.w(u'<form method="post" cubicweb:facetargs="%s" action="">' % |
56 self.w(u'<form method="post" cubicweb:facetargs="%s" action="">' % |
60 html_escape(dumps([divid, 'table', False, vidargs]))) |
57 html_escape(dumps([divid, 'table', False, vidargs]))) |
61 self.w(u'<fieldset id="%sForm" class="%s">' % (divid, hidden and 'hidden' or '')) |
58 self.w(u'<fieldset id="%sForm" class="%s">' % (divid, hidden and 'hidden' or '')) |
62 self.w(u'<input type="hidden" name="divid" value="%s" />' % divid) |
59 self.w(u'<input type="hidden" name="divid" value="%s" />' % divid) |
63 filter_hiddens(self.w, facets=','.join(facet.id for facet in facets), baserql=baserql) |
60 filter_hiddens(self.w, facets=','.join(wdg.facet.id for wdg in fwidgets), baserql=baserql) |
64 self.w(u'<table class="filter">\n') |
61 self.w(u'<table class="filter">\n') |
65 self.w(u'<tr>\n') |
62 self.w(u'<tr>\n') |
66 for facet in facets: |
63 for wdg in fwidgets: |
67 self.w(u'<td>') |
64 self.w(u'<td>') |
68 facet.get_widget().render(w=self.w) |
65 wdg.render(w=self.w) |
69 self.w(u'</td>\n') |
66 self.w(u'</td>\n') |
70 self.w(u'</tr>\n') |
67 self.w(u'</tr>\n') |
71 self.w(u'</table>\n') |
68 self.w(u'</table>\n') |
72 self.w(u'</fieldset>\n') |
69 self.w(u'</fieldset>\n') |
73 self.w(u'</form>\n') |
70 self.w(u'</form>\n') |