diff -r 390514bce78a -r fca4100c1733 src/pyams_portal/zmi/page.py --- a/src/pyams_portal/zmi/page.py Fri Mar 26 16:32:52 2021 +0100 +++ b/src/pyams_portal/zmi/page.py Thu Aug 05 09:27:48 2021 +0200 @@ -95,6 +95,11 @@ def getContent(self): return IPortalPage(self.context) + @property + def template_css_class(self): + template = IPortalPage(self.context).local_template + return template.css_class if template is not None else '' + def updateWidgets(self, prefix=None): super().updateWidgets(prefix) shared_template = self.widgets.get('shared_template') @@ -116,7 +121,12 @@ content.use_local_template = False elif template_mode == TEMPLATE_LOCAL_MODE: content.use_local_template = True - return {IPortalPage: ('inherit_parent', 'use_local_template', 'shared_template')} + template = IPortalPage(self.context).local_template + if template is not None: + template.css_class = self.request.params.get('template_css_class', '') + return { + IPortalPage: ('inherit_parent', 'use_local_template', 'shared_template') + } def get_ajax_output(self, changes): output = super(self.__class__, self).get_ajax_output(changes) @@ -137,23 +147,27 @@ form = event.form if not form.getContent().can_inherit: data = event.data - if (form.request.params.get('template_mode') == TEMPLATE_SHARED_MODE) and not data.get('shared_template'): + if (form.request.params.get('template_mode') == TEMPLATE_SHARED_MODE) and \ + not data.get('shared_template'): form.widgets.errors += (Invalid(_("You must select which shared template to use!")),) -@adapter_config(context=(Interface, IPyAMSLayer, PortalContextTemplatePropertiesEditForm), provides=IPageHeader) +@adapter_config(context=(Interface, IPyAMSLayer, PortalContextTemplatePropertiesEditForm), + provides=IPageHeader) class PortalContextPropertiesEditFormHeaderAdapter(PropertiesEditFormHeaderAdapter): """Portal context template properties edit form header adapter""" icon_class = 'fa fa-fw fa-columns' -@adapter_config(context=(IPortalContext, IAdminLayer, PortalContextTemplatePropertiesEditForm), provides=IFormHelp) +@adapter_config(context=(IPortalContext, IAdminLayer, PortalContextTemplatePropertiesEditForm), + provides=IFormHelp) class PortalContextPropertiesEditFormHelpAdapter(FormHelp): """Portal context properties edit form help adapter""" message = _("If you choose a shared template, you can only adjust settings of " - "each portlet individually but can't change portlets list or page configuration.\n" + "each portlet individually but can't change portlets list or page " + "configuration.\n" "If you use a local template, you can define a whole custom " "configuration but the template definition can't be reused anywhere...""") message_format = 'text' @@ -163,8 +177,10 @@ # Portal context template configuration # -@viewlet_config(name='template-config.menu', context=IPortalContext, layer=IAdminLayer, - manager=IPortalContextTemplatePropertiesMenu, permission=MANAGE_TEMPLATE_PERMISSION, weight=50) +@viewlet_config(name='template-config.menu', + context=IPortalContext, layer=IAdminLayer, + manager=IPortalContextTemplatePropertiesMenu, weight=50, + permission=MANAGE_TEMPLATE_PERMISSION) class PortalContextTemplateConfigMenu(MenuItem): """Portal context template configuration menu""" @@ -186,7 +202,8 @@ return super(PortalContextTemplateConfigMenu, self).get_url() -@pagelet_config(name='template-config.html', context=IPortalContext, layer=IPyAMSLayer, +@pagelet_config(name='template-config.html', + context=IPortalContext, layer=IPyAMSLayer, permission=MANAGE_TEMPLATE_PERMISSION) class PortalContextTemplateLayoutView(PortalTemplateLayoutView): """Portal context template configuration view""" @@ -201,7 +218,8 @@ return self.request.has_permission(MANAGE_TEMPLATE_PERMISSION) -@adapter_config(context=(IPortalContext, IAdminLayer, PortalContextTemplateLayoutView), provides=IPageHeader) +@adapter_config(context=(IPortalContext, IAdminLayer, PortalContextTemplateLayoutView), + provides=IPageHeader) class PortalContextTemplateLayoutHeaderAdapter(PortalTemplateHeaderAdapter): """Portal context template configuration header adapter""" @@ -210,7 +228,8 @@ # Template management views # -@view_config(name='get-slots-width.json', context=IPortalContext, request_type=IPyAMSLayer, +@view_config(name='get-slots-width.json', + context=IPortalContext, request_type=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION, renderer='json', xhr=True) def get_template_slots_width(request): """Get template slots width""" @@ -218,13 +237,15 @@ return config.get_slots_width(request.params.get('device')) -@view_config(name='portlet-properties.html', context=IPortalContext, request_type=IPyAMSLayer, +@view_config(name='portlet-properties.html', + context=IPortalContext, request_type=IPyAMSLayer, permission=MANAGE_TEMPLATE_PERMISSION) class PortalContextTemplatePortletEditForm(PortalTemplatePortletEditForm): """Portal context template portlet edit form""" -@view_config(name='portlet-properties.json', context=IPortalContext, request_type=IPyAMSLayer, +@view_config(name='portlet-properties.json', + context=IPortalContext, request_type=IPyAMSLayer, permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True) class PortalContextTemplatePortletAJAXEditForm(PortalTemplatePortletAJAXEditForm): """Portal context template portlet edit form, JSON renderer"""