diff --git a/src/wuttaweb/grids/base.py b/src/wuttaweb/grids/base.py index 99f1ec6..1d99a9f 100644 --- a/src/wuttaweb/grids/base.py +++ b/src/wuttaweb/grids/base.py @@ -123,6 +123,12 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth See also :meth:`get_label()` and :meth:`set_label()`. + .. attribute:: centered + + Dict of column "centered" flags. + + See also :meth:`is_centered()` and :meth:`set_centered()`. + .. attribute:: renderers Dict of column (cell) value renderer overrides. @@ -397,6 +403,7 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth columns=None, data=None, labels=None, + centered=None, renderers=None, enums=None, checkable=False, @@ -438,6 +445,7 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth self.app = self.config.get_app() self.set_columns(columns or self.get_columns()) + self.centered = centered or {} self.renderers = {} if renderers: for k, val in renderers.items(): @@ -650,6 +658,32 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth return self.labels[key] return self.app.make_title(key) + def set_centered(self, key, centered=True): + """ + Set/override the "centered" flag for a column. + + :param key: Name of column. + + :param centered: Whether the column data should be centered. + + See also :meth:`is_centered()`. Column flags are tracked via + :attr:`centered`. + """ + self.centered[key] = centered + + def is_centered(self, key): + """ + Check if the given column should be centered. + + :param key: Name of column. + + :rtype: boolean + + See also :meth:`set_centered()`. Column flags are tracked via + :attr:`centered`. + """ + return self.centered.get(key, False) + def set_renderer(self, key, renderer, **kwargs): """ Set/override the value renderer for a column. diff --git a/src/wuttaweb/templates/grids/vue_template.mako b/src/wuttaweb/templates/grids/vue_template.mako index 60a27d2..d6e1398 100644 --- a/src/wuttaweb/templates/grids/vue_template.mako +++ b/src/wuttaweb/templates/grids/vue_template.mako @@ -169,6 +169,9 @@ <${b}-table-column field="${column['field']}" label="${column['label']}" v-slot="props" + % if grid.is_centered(column['field']): + centered + % endif :sortable="${json.dumps(column.get('sortable', False))|n}" :searchable="${json.dumps(column.get('searchable', False))|n}" cell-class="c_${column['field']}"> diff --git a/tests/grids/test_base.py b/tests/grids/test_base.py index 5af544e..d98282f 100644 --- a/tests/grids/test_base.py +++ b/tests/grids/test_base.py @@ -219,6 +219,41 @@ class TestGrid(WebTestCase): grid.set_label("foo", "Different") self.assertEqual(grid.get_label("foo"), "Different") + def test_set_centered(self): + model = self.app.model + + grid = self.make_grid(model_class=model.Setting) + self.assertEqual(grid.centered, {}) + + # set flag + grid.set_centered("name") + self.assertIn("name", grid.centered) + self.assertTrue(grid.centered["name"]) + + # clear flag + grid.set_centered("name", False) + self.assertIn("name", grid.centered) + self.assertFalse(grid.centered["name"]) + + def test_is_centered(self): + model = self.app.model + + grid = self.make_grid(model_class=model.Setting) + self.assertEqual(grid.centered, {}) + self.assertFalse(grid.is_centered("name")) + + # set flag + grid.set_centered("name") + self.assertIn("name", grid.centered) + self.assertTrue(grid.centered["name"]) + self.assertTrue(grid.is_centered("name")) + + # clear flag + grid.set_centered("name", False) + self.assertIn("name", grid.centered) + self.assertFalse(grid.centered["name"]) + self.assertFalse(grid.is_centered("name")) + def test_set_renderer(self): grid = self.make_grid(columns=["foo", "bar"]) self.assertEqual(grid.renderers, {})