--- a/src/pyams_content/component/paragraph/zmi/__init__.py Thu Jan 17 12:41:14 2019 +0100
+++ b/src/pyams_content/component/paragraph/zmi/__init__.py Thu Jan 17 16:42:32 2019 +0100
@@ -12,17 +12,19 @@
__docformat__ = 'restructuredtext'
+from pyramid.decorator import reify
from pyramid.location import lineage
from z3c.form import button, field
from zope.interface import Interface
+from pyams_content.component.paragraph import IParagraphContainer, IParagraphTitle
from pyams_content.component.paragraph.interfaces import IBaseParagraph, IParagraphContainerTarget, IParagraphFactory, \
- IParagraphFactorySettings, IParagraphRenderer
+ IParagraphFactorySettings, IParagraphRenderer, PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.zmi.container import ParagraphContainerBaseTable, ParagraphContainerTable
from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerView
-from pyams_content.component.paragraph import IParagraphTitle
from pyams_content.features.renderer.zmi import BaseRenderedContentRenderer
-from pyams_content.interfaces import MANAGE_TOOL_PERMISSION
+from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
+from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION, MANAGE_TOOL_PERMISSION
from pyams_content.shared.common.interfaces import IWfSharedContent
from pyams_form.form import AJAXAddForm, AJAXEditForm, ajax_config
from pyams_form.help import FormHelp
@@ -39,10 +41,11 @@
from pyams_skin.viewlet.menu import MenuDivider, MenuItem
from pyams_skin.viewlet.toolbar import ToolbarMenuItem
from pyams_utils.adapter import adapter_config
+from pyams_utils.factory import get_object_factory
from pyams_utils.registry import query_utility
from pyams_utils.traversing import get_parent
from pyams_viewlet.viewlet import viewlet_config
-from pyams_zmi.form import AdminDialogEditForm
+from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
from pyams_zmi.interfaces.menu import IPropertiesMenu
from pyams_zmi.layer import IAdminLayer
@@ -183,6 +186,36 @@
return None
+#
+# Base paragraphs add forms
+#
+
+class BaseParagraphAddForm(AdminDialogAddForm):
+ """Base paragraph add form"""
+
+ content_interface = None
+
+ @reify
+ def factory(self):
+ return get_object_factory(self.content_interface)
+
+ @property
+ def icon_css_class(self):
+ return 'fa fa-fw {}'.format(self.factory.factory.icon_class)
+
+ @property
+ def fields(self):
+ return field.Fields(self.content_interface).omit(*PARAGRAPH_HIDDEN_FIELDS)
+
+ edit_permission = MANAGE_CONTENT_PERMISSION
+
+ def create(self, data):
+ return self.factory()
+
+ def add(self, object):
+ IParagraphContainer(self.context).append(object)
+
+
class BaseParagraphAJAXAddForm(AJAXAddForm):
"""Base paragraph AJAX add form"""
@@ -204,6 +237,10 @@
}
+#
+# Base paragraph edit forms
+#
+
class IParagraphEditFormButtons(Interface):
"""Paragraph edit form buttons"""
@@ -234,7 +271,9 @@
"""Base paragraph edit form"""
prefix = 'paragraph.'
- buttons = button.Buttons(IParagraphInnerEditFormButtons)
+ buttons = button.Buttons(IParagraphEditFormButtons)
+
+ content_interface = None
@property
def title(self):
@@ -248,6 +287,23 @@
return II18n(content).query_attribute('title', request=self.request)
return super(BaseParagraphPropertiesEditForm, self).title
+ @reify
+ def factory(self):
+ return get_object_factory(self.content_interface)
+
+ @property
+ def icon_css_class(self):
+ return 'fa fa-fw {}'.format(self.factory.factory.icon_class)
+
+ @property
+ def fields(self):
+ fields = field.Fields(self.content_interface).omit(*PARAGRAPH_HIDDEN_FIELDS)
+ if 'renderer' in fields:
+ fields['renderer'].widgetFactory = RendererFieldWidget
+ return fields
+
+ edit_permission = MANAGE_CONTENT_PERMISSION
+
class BaseParagraphAJAXEditForm(AJAXEditForm):
"""Base paragraph AJAX edit form"""