# HG changeset patch # User Thierry Florac # Date 1444233774 -7200 # Node ID cfdcf86462f59907fe07eec7786b6c849bc87282 # Parent 229b0844c578225294387cccbd04cc580456c2b7 Allow setting of DataTables column type diff -r 229b0844c578 -r cfdcf86462f5 src/pyams_skin/table.py --- a/src/pyams_skin/table.py Wed Oct 07 18:01:32 2015 +0200 +++ b/src/pyams_skin/table.py Wed Oct 07 18:02:54 2015 +0200 @@ -18,6 +18,7 @@ # import interfaces from pyams_skin.interfaces.container import ITable, ITableElementEditor, ITableWithActions, ITableElementName from pyams_skin.layer import IPyAMSLayer +from pyams_utils.interfaces import MANAGE_PERMISSION from pyams_viewlet.interfaces import IViewletManager from z3c.table.interfaces import IColumn, IValues from zope.container.interfaces import IContained, IContainer @@ -65,11 +66,16 @@ @property def data_attributes(self): - return {'tr': {'id': lambda x: '{0}::{1}'.format(self.id, getattr(x, '__name__', '')), - 'data-ams-element-name': lambda x: getattr(x, '__name__', None), - 'data-ams-url': lambda x: getattr(get_element_editor(self, x), 'url', None), - 'data-toggle': lambda x: 'modal' if getattr(get_element_editor(self, x), 'modal_target', None) - else None}} + return {'tr': {'id': + lambda x, col: '{0}::{1}'.format(self.id, getattr(x, '__name__', '')), + 'data-ams-element-name': + lambda x, col: getattr(x, '__name__', None), + 'data-ams-url': + lambda x, col: getattr(get_element_editor(self, x), 'url', None), + 'data-toggle': + lambda x, col: 'modal' if getattr(get_element_editor(self, x), 'modal_target', None) + else None}, + 'th': {'data-ams-datatable-stype': self.get_column_type}} batchSize = 10000 startBatchingAt = 10000 @@ -87,9 +93,13 @@ return self.request.params.get(self.prefix + '-sortOrder', self.sortOrder) @staticmethod - def check_data_attribute(attribute, source): + def get_column_type(column, _=None): + return getattr(column, 'dt_sort_type', None) + + @staticmethod + def check_data_attribute(attribute, source, column=None): if callable(attribute): - return attribute(source) + return attribute(source, column) else: return str(attribute) @@ -98,7 +108,7 @@ if attrs: result = '' for key, value in attrs.items(): - checked_value = self.check_data_attribute(value, source) + checked_value = self.check_data_attribute(value, source, column) if checked_value is not None: result += ' {0}="{1}"'.format(key, checked_value) return result @@ -115,6 +125,10 @@ return super(BaseTable, self).renderRow(row, cssClass) \ .replace('