src/pyams_content/component/paragraph/zmi/__init__.py
changeset 527 5dd1aa8bedd9
parent 524 6de7d0a3a77d
child 537 21152756d312
--- a/src/pyams_content/component/paragraph/zmi/__init__.py	Wed Apr 11 16:44:46 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/__init__.py	Wed Apr 11 16:46:31 2018 +0200
@@ -35,6 +35,8 @@
 from pyams_form.help import FormHelp
 from pyams_form.security import ProtectedFormObjectMixin
 from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.event import get_json_switched_table_refresh_event
+from pyams_skin.table import get_element_id
 from pyams_skin.viewlet.menu import MenuItem, MenuDivider
 from pyams_skin.viewlet.toolbar import ToolbarMenuItem
 from pyams_utils.adapter import adapter_config
@@ -69,6 +71,8 @@
 class DefaultParagraphsEditForm(AdminDialogEditForm):
     """Default paragraphs edit form"""
 
+    prefix = 'default_paragraphs.'
+
     legend = _("Paragraphs types")
 
     fields = field.Fields(IParagraphFactorySettings)
@@ -96,6 +100,58 @@
 # Base paragraph forms
 #
 
+def get_json_paragraph_refresh_event(context, request):
+    """Get JSON response value for paragraph refresh event"""
+    parent = get_parent(context, IParagraphContainerTarget)
+    return {
+        'event': 'myams.refresh',
+        'options': {
+            'handler': 'PyAMS_content.paragraphs.refreshParagraph',
+            'object_id': get_element_id(ParagraphContainerBaseTable, context, parent),
+            'title': II18n(context).query_attribute('title', request=request),
+            'visible': context.visible
+        }
+    }
+
+
+def get_json_paragraph_toolbar_refresh_event(context, request, table_factory=None, viewlet_factory=None):
+    """Get JSON response value for paragraph toolbar refresh event"""
+    if table_factory is None:
+        from pyams_content.component.paragraph.zmi.container import ParagraphContainerTable as table_factory
+    if viewlet_factory is None:
+        from pyams_content.component.paragraph.zmi.container import ParagraphTitleToolbarViewletManager as viewlet_factory
+
+    parent = get_parent(context, IParagraphContainerTarget)
+    table = table_factory(context, request)
+    viewlet = viewlet_factory(context, request, table)
+    viewlet.update()
+    return {
+        'event': 'myams.refresh',
+        'options': {
+            'handler': 'PyAMS_content.paragraphs.updateToolbar',
+            'object_id': get_element_id(ParagraphContainerBaseTable, context, parent),
+            'toolbar_tag': viewlet.render()
+        }
+    }
+
+
+def get_json_paragraph_markers_refresh_event(context, request, form, viewlet_factory, marker_type=None):
+    """Get JSON response value for paragraph markers refresh event"""
+    parent = get_parent(context, IParagraphContainerTarget)
+    marker = viewlet_factory(context, request, form, None)
+    if marker is not None:
+        marker.update()
+        return {
+            'event': 'myams.refresh',
+            'options': {
+                'handler': 'PyAMS_content.paragraphs.updateMarkers',
+                'object_id': get_element_id(ParagraphContainerBaseTable, context, parent),
+                'marker_type': marker_type or marker.marker_type,
+                'marker_tag': marker.render()
+            }
+        }
+
+
 class BaseParagraphAddMenu(ProtectedFormObjectMixin, ToolbarMenuItem):
     """Base paragraph add menu"""
 
@@ -133,26 +189,17 @@
             table_factory = ParagraphContainerTable
         else:
             table_factory = ParagraphContainerBaseTable
-        table = table_factory(self.context, self.request)
-        table.update()
-        return {'status': 'success',
-                'message': self.request.localizer.translate(_("Paragraph was correctly added.")),
-                'events': [{
-                    'event': 'myams.refresh',
-                    'options': {
-                        'handler': 'MyAMS.skin.refreshSwitchedTable',
-                        'object_id': table.id,
-                        'table': table.render()
-                    }
-                }]}
+        return {
+            'status': 'success',
+            'message': self.request.localizer.translate(_("Paragraph was correctly added.")),
+            'events': [get_json_switched_table_refresh_event(self.context, self.request, table_factory)]
+        }
 
 
 class BaseParagraphPropertiesEditForm(AdminDialogEditForm):
     """Base paragraph edit form"""
 
-    @property
-    def prefix(self):
-        return 'paragraph_{0}_form.'.format(self.context.__name__)
+    prefix = 'paragraph.'
 
     @property
     def title(self):
@@ -173,13 +220,6 @@
     def get_ajax_output(self, changes):
         output = super(BaseParagraphAJAXEditForm, self).get_ajax_output(changes)
         if 'title' in changes.get(IBaseParagraph, ()):
-            output.setdefault('events', []).append({
-                'event': 'myams.refresh',
-                'options': {
-                    'handler': 'PyAMS_content.paragraphs.refreshParagraph',
-                    'object_name': self.context.__name__,
-                    'title': II18n(self.context).query_attribute('title', request=self.request),
-                    'visible': self.context.visible
-                }
-            })
+            output.setdefault('events', []).append(
+                get_json_paragraph_refresh_event(self.context, self.request))
         return output