diff -r 9cbf4c86f57a -r 75d208ab8444 web/views/tableview.py
--- a/web/views/tableview.py Fri Jul 01 12:48:39 2011 +0200
+++ b/web/views/tableview.py Fri Jul 01 13:39:45 2011 +0200
@@ -15,110 +15,48 @@
#
# You should have received a copy of the GNU Lesser General Public License along
# with CubicWeb. If not, see .
-"""generic table view, including filtering abilities"""
+"""generic table view, including filtering abilities using facets"""
__docformat__ = "restructuredtext en"
_ = unicode
from logilab.mtconverter import xml_escape
+from cubicweb import NoSelectableObject, tags
from cubicweb.selectors import nonempty_rset
from cubicweb.utils import make_uid, json_dumps
from cubicweb.view import EntityView, AnyRsetView
-from cubicweb import tags
from cubicweb.uilib import toggle_action, limitsize, htmlescape
-from cubicweb.web import jsonize
-from cubicweb.web.component import Link
+from cubicweb.web import jsonize, component, facet
from cubicweb.web.htmlwidgets import (TableWidget, TableColumn, MenuWidget,
PopupBoxMenu)
-from cubicweb.web import facet
-from cubicweb.web.facet import prepare_facets_rqlst, filter_hiddens
+
class TableView(AnyRsetView):
- """The table view accepts any non-empty rset. It uses
- introspection on the result set to compute column names and the
- proper way to display the cells.
+ """The table view accepts any non-empty rset. It uses introspection on the
+ result set to compute column names and the proper way to display the cells.
+
It is however highly configurable and accepts a wealth of options.
"""
__regid__ = 'table'
title = _('table')
finalview = 'final'
- wdg_stack_size = 8
def form_filter(self, divid, displaycols, displayactions, displayfilter,
paginate, hidden=True):
- rqlst = self.cw_rset.syntax_tree()
- # union not yet supported
- if len(rqlst.children) != 1:
+ try:
+ filterform = self._cw.vreg['views'].select(
+ 'facet.filtertable', self._cw, rset=self.cw_rset)
+ except NoSelectableObject:
return ()
- rqlst = rqlst.copy()
- self._cw.vreg.rqlhelper.annotate(rqlst)
- mainvar, baserql = prepare_facets_rqlst(rqlst, self.cw_rset.args)
- wdgs = [facet.get_widget() for facet in self._cw.vreg['facets'].poss_visible_objects(
- self._cw, rset=self.cw_rset, rqlst=rqlst.children[0], context='tablefilter',
- filtered_variable=mainvar)]
- wdgs = [wdg for wdg in wdgs if wdg is not None]
- if wdgs:
- self._generate_form(divid, baserql, wdgs, hidden,
- vidargs={'paginate': paginate,
- 'displaycols': displaycols,
- 'displayactions': displayactions,
- 'displayfilter': displayfilter})
- return self.show_hide_actions(divid, not hidden)
- return ()
-
- def _generate_form(self, divid, baserql, fwidgets, hidden=True, vidargs={}):
- """display a form to filter table's content. This should only
- occur when a context eid is given
- """
- w = self.w
- self._cw.add_css('cubicweb.facets.css')
- self._cw.add_js( ('cubicweb.ajax.js', 'cubicweb.facets.js'))
- self._cw.html_headers.define_var('facetLoadingMsg',
- self._cw._('facet-loading-msg'))
- # drop False / None values from vidargs
- vidargs = dict((k, v) for k, v in vidargs.iteritems() if v)
- w(u'
\n')
+ vidargs = {'paginate': paginate,
+ 'displaycols': displaycols,
+ 'displayactions': displayactions,
+ 'displayfilter': displayfilter}
+ cssclass = hidden and 'hidden' or ''
+ filterform.render(self.w, vid=self.__regid__, divid=divid,
+ vidargs=vidargs, cssclass=cssclass)
+ return self.show_hide_actions(divid, not hidden)
def main_var_index(self):
"""returns the index of the first non-attribute variable among the RQL
@@ -241,7 +179,7 @@
ident='%sActions' % divid)
box.append(menu)
for url, label, klass, ident in actions:
- menu.append(Link(url, label, klass=klass, id=ident))
+ menu.append(component.Link(url, label, klass=klass, id=ident))
box.render(w=self.w)
self.w(u'')