# HG changeset patch # User Thierry Florac # Date 1425423922 -3600 # Node ID 23d78e06822dba5629c6c9e3d1dccc25a30f9a59 # Parent 21ae3534db9bd65691e73901bdf23c8e10fa7c8d Added inner table row actions column diff -r 21ae3534db9b -r 23d78e06822d src/pyams_skin/interfaces/container.py --- a/src/pyams_skin/interfaces/container.py Wed Mar 04 00:04:11 2015 +0100 +++ b/src/pyams_skin/interfaces/container.py Wed Mar 04 00:05:22 2015 +0100 @@ -40,6 +40,10 @@ click_handler = TextLine(title="Default elements click handler") +class ITableWithActions(ITable): + """Marker interface for table with inner actions menus""" + + class ITableElementEditor(Interface): """Table element editor interface""" diff -r 21ae3534db9b -r 23d78e06822d src/pyams_skin/interfaces/viewlet.py --- a/src/pyams_skin/interfaces/viewlet.py Wed Mar 04 00:04:11 2015 +0100 +++ b/src/pyams_skin/interfaces/viewlet.py Wed Mar 04 00:05:22 2015 +0100 @@ -291,17 +291,28 @@ css_class = TextLine(title="Button CSS class", default='btn btn-xs btn-primary dropdown-toggle') + menu_css_class = TextLine(title="Menu CSS class", + default='dropdown-menu pull-right') + class IToolbarAddingMenu(IToolbarMenu): """Toolbar adding actions menu""" +class ITableItemColumnActionsMenu(IViewletManager, IToolbarMenu): + """Table item actions viewlet manager""" + + class IToolbarMenuItem(IToolbarAction): """Toolbar actions menu item""" css_class = TextLine(title="Menu CSS class", default='') + stop_propagation = Bool(title="Stop click event propagation", + required=True, + default=False) + class IContextActions(IViewletManager, IToolbarMenu): """Context actions viewlet manager""" diff -r 21ae3534db9b -r 23d78e06822d src/pyams_skin/table.py --- a/src/pyams_skin/table.py Wed Mar 04 00:04:11 2015 +0100 +++ b/src/pyams_skin/table.py Wed Mar 04 00:05:22 2015 +0100 @@ -12,11 +12,13 @@ __docformat__ = 'restructuredtext' + # import standard library # import interfaces -from pyams_skin.interfaces.container import ITable, ITableElementEditor +from pyams_skin.interfaces.container import ITable, ITableElementEditor, ITableWithActions from pyams_skin.layer import IPyAMSLayer +from pyams_viewlet.interfaces import IViewletManager from z3c.table.interfaces import IColumn from zope.container.interfaces import IContained @@ -179,6 +181,26 @@ return absolute_url(item, self.request, self.url) +@adapter_config(name='actions', context=(Interface, IPyAMSLayer, ITableWithActions), provides=IColumn) +class MenuActionsColumn(I18nColumn, Column): + """Menu actions column""" + + _header = _("Actions") + cssClasses = {'th': 'actions-menu', + 'td': 'nowrap'} + weight = 9000 + + def renderCell(self, item): + registry = self.request.registry + viewlet = registry.queryMultiAdapter((item, self.request, self.table), IViewletManager, + name='pyams.table-item.actions') + if viewlet is not None: + viewlet.update() + return viewlet.render() + else: + return '' + + class TrashColumn(ActionColumn): """Trash action icon column""" diff -r 21ae3534db9b -r 23d78e06822d src/pyams_skin/viewlet/toolbar/__init__.py --- a/src/pyams_skin/viewlet/toolbar/__init__.py Wed Mar 04 00:04:11 2015 +0100 +++ b/src/pyams_skin/viewlet/toolbar/__init__.py Wed Mar 04 00:05:22 2015 +0100 @@ -16,9 +16,9 @@ # import standard library # import interfaces -from pyams_skin.interfaces.container import ITable +from pyams_skin.interfaces.container import ITable, ITableWithActions from pyams_skin.interfaces.viewlet import IToolbarViewletManager, IToolbarAction, IToolbarMenu, IToolbarMenuItem, \ - IContextActions, IToolbarAddingMenu + IContextActions, IToolbarAddingMenu, ITableItemColumnActionsMenu from pyams_skin.layer import IPyAMSLayer from pyams_utils.interfaces.tales import ITALESExtension from zope.contentprovider.interfaces import IContentProvider @@ -65,6 +65,7 @@ label = FieldProperty(IToolbarMenu['label']) label_css_class = FieldProperty(IToolbarMenu['label_css_class']) css_class = FieldProperty(IToolbarMenu['css_class']) + menu_css_class = FieldProperty(IToolbarMenu['menu_css_class']) click_handler = FieldProperty(IToolbarMenu['click_handler']) url = FieldProperty(IToolbarMenu['url']) modal_target = FieldProperty(IToolbarMenu['modal_target']) @@ -92,6 +93,16 @@ label = _("Add...") +@viewletmanager_config(name='pyams.table-item.actions', view=ITableWithActions, layer=IPyAMSLayer, + provides=ITableItemColumnActionsMenu) +@implementer(ITableItemColumnActionsMenu) +class TableItemColumnActionsMenu(ToolbarMenu): + """Table item actions menu""" + + label = _("Actions...") + css_class = 'btn btn-xs btn-info dropdown-toggle' + + @template_config(template='menu-item.pt', layer=IPyAMSLayer) @implementer(IToolbarMenuItem) class ToolbarMenuItem(Viewlet): @@ -103,6 +114,7 @@ click_handler = FieldProperty(IToolbarMenuItem['click_handler']) url = FieldProperty(IToolbarMenuItem['url']) modal_target = FieldProperty(IToolbarMenuItem['modal_target']) + stop_propagation = FieldProperty(IToolbarMenuItem['stop_propagation']) def get_url(self): return absolute_url(self.context, self.request, self.url) diff -r 21ae3534db9b -r 23d78e06822d src/pyams_skin/viewlet/toolbar/menu-item.pt --- a/src/pyams_skin/viewlet/toolbar/menu-item.pt Wed Mar 04 00:04:11 2015 +0100 +++ b/src/pyams_skin/viewlet/toolbar/menu-item.pt Wed Mar 04 00:05:22 2015 +0100 @@ -1,5 +1,6 @@
  •   diff -r 21ae3534db9b -r 23d78e06822d src/pyams_skin/viewlet/toolbar/menu.pt --- a/src/pyams_skin/viewlet/toolbar/menu.pt Wed Mar 04 00:04:11 2015 +0100 +++ b/src/pyams_skin/viewlet/toolbar/menu.pt Wed Mar 04 00:05:22 2015 +0100 @@ -4,7 +4,7 @@   -