).
+
+ `header_column_idx` may be used to specify a column index or a set of column
+ indiced where values should be inserted inside tag instead of | .
+
+ `cssclass` is the CSS class used on the tag, and default to
+ 'listing' (so that the table will look similar to those generated by the
+ table view).
+ """
+ __regid__ = 'pyvaltable'
+ __select__ = match_kwargs('pyvalue')
+ default_column_renderer_class = PyValTableColRenderer
+ paginable = False # not supported
+ headers = None
+ cssclass = None
+ domid = None
+
+ def __init__(self, req, pyvalue, headers=None, cssclass=None,
+ header_column_idx=None, **kwargs):
+ super(PyValTableView, self).__init__(req, **kwargs)
+ self.pyvalue = pyvalue
+ if headers is not None:
+ self.headers = headers
+ elif self.headers: # headers set on a class attribute, translate
+ self.headers = [self._cw._(header) for header in self.headers]
+ if cssclass is not None:
+ self.cssclass = cssclass
+ self.header_column_idx = header_column_idx
+
+ @property
+ def layout_args(self):
+ args = {}
+ if self.cssclass:
+ args['cssclass'] = self.cssclass
+ if self.header_column_idx is not None:
+ args['header_column_idx'] = self.header_column_idx
+ return args
+
+ # layout callbacks #########################################################
+
+ @property
+ def table_size(self):
+ """return the number of rows (header excluded) to be displayed"""
+ return len(self.pyvalue)
+
+ @property
+ def has_headers(self):
+ return self.headers
+
+ def build_column_renderers(self):
+ return [self.column_renderer(colid)
+ for colid in range(len(self.pyvalue[0]))]
+
+ def facets_form(self, mainvar=None):
+ return None # not supported
+
+ def table_actions(self):
+ return [] # not supported
+
+
+class PyValListView(View):
+ """display a list of values into an html list.
+
+ Take care, content is NOT xml-escaped.
+ """
+ __regid__ = 'pyvallist'
+ __select__ = match_kwargs('pyvalue')
+
+ def call(self, pyvalue):
+ self.w(u'\n')
+ for line in pyvalue:
+ self.w(u'- %s
\n' % line)
+ self.w(u' \n')
|