src/pyams_portal/zmi/template.py
changeset 289 fca4100c1733
parent 279 c025abc00397
child 290 3977d9c8618d
--- a/src/pyams_portal/zmi/template.py	Fri Mar 26 16:32:52 2021 +0100
+++ b/src/pyams_portal/zmi/template.py	Thu Aug 05 09:27:48 2021 +0200
@@ -33,6 +33,7 @@
 from pyams_skin.page import DefaultPageHeaderAdapter
 from pyams_skin.table import DefaultElementEditorAdapter
 from pyams_skin.viewlet.breadcrumb import BreadcrumbAdminLayerItem
+from pyams_skin.viewlet.menu import MenuItem
 from pyams_skin.viewlet.toolbar import ToolbarAction, ToolbarMenuDivider, ToolbarMenuItem
 from pyams_utils.adapter import ContextRequestAdapter, adapter_config
 from pyams_utils.registry import get_utility, query_utility
@@ -41,6 +42,7 @@
 from pyams_utils.url import absolute_url
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
+from pyams_zmi.interfaces.menu import IPropertiesMenu
 from pyams_zmi.layer import IAdminLayer
 
 
@@ -82,9 +84,11 @@
             return self.context.name
         context = get_parent(self.context, IPortalContext)
         if context is not None:
-            adapter = self.request.registry.queryMultiAdapter((context, self.request), ITableElementName)
+            adapter = self.request.registry.queryMultiAdapter((context, self.request),
+                                                              ITableElementName)
             if adapter is not None:
-                return self.request.localizer.translate(_("{0} (local template)")).format(adapter.name)
+                return self.request.localizer.translate(_("{0} (local template)")).format(
+                    adapter.name)
         return '--'
 
 
@@ -112,7 +116,8 @@
         # check for portal context
         context = get_parent(self.context, IPortalContext)
         if context is not None:
-            adapter = self.request.registry.queryMultiAdapter((context, self.request, self.view), IContentTitle)
+            adapter = self.request.registry.queryMultiAdapter((context, self.request, self.view),
+                                                              IContentTitle)
             if adapter is None:
                 adapter = IContentTitle(context, None)
             if adapter is not None:
@@ -120,7 +125,7 @@
 
 
 #
-# Template views
+# Template add views
 #
 
 @viewlet_config(name='add-portal-template.action', context=ISite, layer=IAdminLayer,
@@ -144,7 +149,7 @@
     legend = _("Add shared template")
     icon_css_class = 'fa fa-fw fa-columns'
 
-    fields = field.Fields(IPortalTemplate)
+    fields = field.Fields(IPortalTemplate).select('name')
     edit_permission = MANAGE_TEMPLATE_PERMISSION
 
     def create(self, data):
@@ -168,58 +173,47 @@
 
 
 #
-# Template renaming form
+# Template properties form
 #
 
-@viewlet_config(name='rename.menu', context=IPortalTemplate, layer=IPyAMSLayer,
-                view=PortalTemplateLayoutView, manager=IContextActions,
-                permission=MANAGE_TEMPLATE_PERMISSION, weight=100)
-class PortalTemplateRenameMenu(ToolbarMenuItem):
-    """Portal template rename menu item"""
+@viewlet_config(name='properties.menu',
+                context=IPortalTemplate, layer=IAdminLayer,
+                manager=IPropertiesMenu, weight=10,
+                permission=MANAGE_TEMPLATE_PERMISSION)
+class PortalTemplatePropertiesMenu(MenuItem):
+    """Portal template properties menu item"""
 
     def __new__(cls, context, request, view, manager):
         container = get_parent(context, IPortalTemplateContainer)
         if container is None:
             return None
-        return ToolbarMenuDivider.__new__(cls)
+        return MenuItem.__new__(cls)
 
-    label = _("Rename template...")
+    label = _("Template properties...")
     label_css_class = 'fa fa-fw fa-edit'
 
-    url = 'rename.html'
+    url = 'properties.html'
     modal_target = True
 
 
-class IPortalTemplateRenameButtons(Interface):
-    """Portal template rename form buttons"""
-
-    close = CloseButton(name='close', title=_("Cancel"))
-    rename = button.Button(name='rename', title=_("Rename template"))
-
+@pagelet_config(name='properties.html',
+                context=IPortalTemplate, layer=IPyAMSLayer,
+                permission=MANAGE_TEMPLATE_PERMISSION)
+@ajax_config(name='properties.json', context=IPortalTemplate, layer=IPyAMSLayer)
+class PortalTemplatePropertiesEditForm(AdminDialogEditForm):
+    """Portal template properties edit form"""
 
-@pagelet_config(name='rename.html', context=IPortalTemplate, layer=IPyAMSLayer,
-                permission=MANAGE_TEMPLATE_PERMISSION)
-@ajax_config(name='rename.json', context=IPortalTemplate, layer=IPyAMSLayer)
-class PortalTemplateRenameForm(AdminDialogEditForm):
-    """Portal template rename form"""
-
-    legend = _("Rename template")
+    legend = _("Template properties")
     icon_css_class = 'fa fa-fw fa-edit'
 
-    fields = field.Fields(IPortalTemplate).select('name')
-    buttons = button.Buttons(IPortalTemplateRenameButtons)
+    fields = field.Fields(IPortalTemplate).select('name', 'css_class')
 
     edit_permission = MANAGE_TEMPLATE_PERMISSION
 
     _renamed = False
 
-    def updateActions(self):
-        super(PortalTemplateRenameForm, self).updateActions()
-        if 'rename' in self.actions:
-            self.actions['rename'].addClass('btn-primary')
-
     def update_content(self, content, data):
-        changes = super(PortalTemplateRenameForm, self).update_content(content, data)
+        changes = super().update_content(content, data)
         if changes:
             data = data.get(self, data)
             old_name = content.__name__
@@ -237,8 +231,7 @@
                 'status': 'redirect',
                 'location': absolute_url(self.getContent(), self.request, 'admin#properties.html')
             }
-        else:
-            return super(PortalTemplateRenameForm, self).get_ajax_output(changes)
+        return super().get_ajax_output(changes)
 
 
 #