# HG changeset patch # User Thierry Florac # Date 1528990435 -7200 # Node ID 7dd8d5c7e2062fd235d6b688422858888fb573b7 # Parent 563e611a329f8203c832a75e8a51e47774a6c39c Added support for renderer settings diff -r 563e611a329f -r 7dd8d5c7e206 src/pyams_portal/zmi/portlet.py --- a/src/pyams_portal/zmi/portlet.py Thu Jun 14 17:30:40 2018 +0200 +++ b/src/pyams_portal/zmi/portlet.py Thu Jun 14 17:33:55 2018 +0200 @@ -9,6 +9,8 @@ # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # +from pyams_form.form import ajax_config +from pyams_pagelet.pagelet import pagelet_config __docformat__ = 'restructuredtext' @@ -17,10 +19,12 @@ # import interfaces from pyams_form.interfaces.form import IInnerTabForm -from pyams_portal.interfaces import IPortlet, IPortalTemplate, IPortalPage, MANAGE_TEMPLATE_PERMISSION +from pyams_portal.interfaces import IPortlet, IPortalTemplate, IPortalPage, MANAGE_TEMPLATE_PERMISSION, \ + IPortletSettings, IPortletRendererSettings from pyams_skin.layer import IPyAMSLayer # import packages +from pyams_portal.zmi.widget import PortletRendererFieldWidget from pyams_template.template import template_config from pyams_utils.adapter import adapter_config from pyams_utils.url import absolute_url @@ -96,6 +100,35 @@ @property def fields(self): - return field.Fields(self.parent_form.settings).omit('__name__') + fields = field.Fields(self.parent_form.settings).omit('__name__', 'renderer') + \ + field.Fields(self.parent_form.settings).select('renderer') + fields['renderer'].widgetFactory = PortletRendererFieldWidget + return fields weight = 10 + + +# +# Portlet renderer properties edit form +# + +@pagelet_config(name='renderer-properties.html', context=IPortletSettings, layer=IPyAMSLayer, + permission=MANAGE_TEMPLATE_PERMISSION) +@ajax_config(name='renderer-properties.json', context=IPortletSettings, layer=IPyAMSLayer) +class PortletRendererPropertiesEditForm(AdminDialogEditForm): + """Portlet renderer properties edit form""" + + prefix = 'portlet_renderer_properties.' + + legend = _("Edit renderer properties") + icon_css_class = 'fa fa-fw fa-pencil-square-o' + + @property + def fields(self): + renderer = self.context.get_renderer(self.request) + return field.Fields(renderer.settings_interface or Interface) + + edit_permission = MANAGE_TEMPLATE_PERMISSION + + def getContent(self): + return IPortletRendererSettings(self.context) diff -r 563e611a329f -r 7dd8d5c7e206 src/pyams_portal/zmi/templates/renderer-input.pt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pyams_portal/zmi/templates/renderer-input.pt Thu Jun 14 17:33:55 2018 +0200 @@ -0,0 +1,43 @@ + diff -r 563e611a329f -r 7dd8d5c7e206 src/pyams_portal/zmi/widget.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pyams_portal/zmi/widget.py Thu Jun 14 17:33:55 2018 +0200 @@ -0,0 +1,38 @@ +# +# Copyright (c) 2008-2018 Thierry Florac +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# + +__docformat__ = 'restructuredtext' + + +# import standard library + +# import interfaces +from pyams_form.interfaces import IFormLayer +from z3c.form.interfaces import INPUT_MODE + +# import packages +from pyams_form.widget import widgettemplate_config, Select2Widget +from z3c.form.widget import FieldWidget + + +@widgettemplate_config(mode=INPUT_MODE, template='templates/renderer-input.pt', layer=IFormLayer) +class PortletRendererWidget(Select2Widget): + """Portlet renderer selection widget""" + + @property + def show_renderer_properties(self): + renderer = self.context.get_renderer(self.request) + return (renderer is not None) and (renderer.settings_interface is not None) + + +def PortletRendererFieldWidget(field, request): + return FieldWidget(field, PortletRendererWidget(request))