diff --git a/edbob/pyramid/forms/formalchemy/grid.py b/edbob/pyramid/forms/formalchemy/grid.py index 4e5fa3f..b217bc3 100644 --- a/edbob/pyramid/forms/formalchemy/grid.py +++ b/edbob/pyramid/forms/formalchemy/grid.py @@ -32,6 +32,7 @@ from webhelpers.html.tags import literal import formalchemy +import edbob from edbob.util import prettify @@ -75,6 +76,11 @@ class AlchemyGrid(formalchemy.Grid): self.clickable = config.get('clickable', False) self.deletable = config.get('deletable', False) self.pager = instances if isinstance(instances, paginate.Page) else None + self.extra_columns = [] + + def add_column(self, name, label, callback): + self.extra_columns.append( + edbob.Object(name=name, label=label, callback=callback)) def field_name(self, field): return field.name diff --git a/edbob/pyramid/static/css/index.css b/edbob/pyramid/static/css/index.css index 45ca9df..8760c0e 100644 --- a/edbob/pyramid/static/css/index.css +++ b/edbob/pyramid/static/css/index.css @@ -12,12 +12,11 @@ div.object-index { font-size: 10pt; - margin: auto; } -div.object-index div.wrapper { - overflow: auto; - padding-bottom: 10px; +div.object-index table.header { + padding-bottom: 5px; + width: 100%; } @@ -25,8 +24,11 @@ div.object-index div.wrapper { * Context Menu ******************************/ -div.object-index #context-menu { - float: right; +div.object-index table.header td.context-menu { + vertical-align: top; +} + +div.object-index table.header td.context-menu ul { list-style-type: none; text-align: right; } @@ -50,6 +52,16 @@ div.object-index div.filterset div.buttons * { } +/****************************** + * Tools + ******************************/ + +div.object-index table.header td.tools { + text-align: right; + vertical-align: bottom; +} + + /****************************** * Grids ******************************/ diff --git a/edbob/pyramid/templates/edbob/index.mako b/edbob/pyramid/templates/edbob/index.mako index fea438a..44d1af7 100644 --- a/edbob/pyramid/templates/edbob/index.mako +++ b/edbob/pyramid/templates/edbob/index.mako @@ -6,18 +6,27 @@ %def> <%def name="context_menu_items()">%def> +<%def name="tools()">%def>
+ ${search.render()|n} + | +
+
|
+
+ ${self.tools()} + | +
${h.checkbox('check-all')} | - % endif + % if checkboxes: +${h.checkbox('check-all')} | + % endif % for field in grid.iter_fields(): - ${grid.th_sortable(field)|n} - % endfor - % for i in range(len(grid.config['actions'])): -- % endfor - % if grid.deletable: - | - % endif + ${grid.th_sortable(field)|n} + % endfor + % for col in grid.extra_columns: + | ${col.label} + % endfor + % if grid.deletable: + | + % endif |
---|---|---|---|---|---|
${h.checkbox('check-'+grid.model.uuid, disabled=True)} | - % endif + % if checkboxes: +${h.checkbox('check-'+grid.model.uuid, disabled=True)} | + % endif % for field in grid.iter_fields(): -${grid.render_field(field, True)|n} | - % endfor - ${grid.get_actions()} - % if grid.deletable: -- % endif - | ${grid.render_field(field, True)|n} | + % endfor + % for col in grid.extra_columns: +${col.callback(row)|n} | + % endfor + % if grid.deletable: ++ % endif + % endfor |
- showing - ${grid.pager.first_item} thru ${grid.pager.last_item} of ${grid.pager.item_count} -
-- ${h.select('grid-page-count', grid.pager.items_per_page, (5, 10, 20, 50, 100))} - per page: - ${grid.pager.pager('~3~', onclick='return grid_navigate_page($(this));')} -
++ showing + ${grid.pager.first_item} thru ${grid.pager.last_item} of ${grid.pager.item_count} +
++ ${h.select('grid-page-count', grid.pager.items_per_page, (5, 10, 20, 50, 100))} + per page: + ${grid.pager.pager('~3~', onclick='return grid_navigate_page($(this));')} +