src/pyams_content/shared/common/zmi/types.py
changeset 591 b694d5667d17
parent 527 5dd1aa8bedd9
child 634 4e43b556a2a9
--- a/src/pyams_content/shared/common/zmi/types.py	Wed Jun 06 13:32:14 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/types.py	Fri Jun 08 10:33:23 2018 +0200
@@ -33,7 +33,7 @@
 
 # import packages
 from pyams_content.shared.common.types import DataType, SubType
-from pyams_form.form import AJAXAddForm, AJAXEditForm
+from pyams_form.form import AJAXAddForm, ajax_config
 from pyams_form.security import ProtectedFormObjectMixin
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.container import delete_container_element
@@ -239,6 +239,7 @@
 
 @pagelet_config(name='add-data-type.html', context=ITypedSharedTool, layer=IPyAMSLayer,
                 permission=MANAGE_TOOL_PERMISSION)
+@ajax_config(name='add-data-type.json', context=ITypedSharedTool, layer=IPyAMSLayer, base=AJAXAddForm)
 class DataTypeAddForm(AdminDialogAddForm):
     """Data type add form"""
 
@@ -249,7 +250,6 @@
 
     fields = field.Fields(IDataType).omit('__parent__', '__name__')
 
-    ajax_handler = 'add-data-type.json'
     edit_permission = MANAGE_TOOL_PERMISSION
 
     def create(self, data):
@@ -260,7 +260,7 @@
         ITypedDataManager(self.context)[name] = object
 
     def nextURL(self):
-        return absolute_url(self.context, self.request, 'admin#data-types.html')
+        return '#data-types.html'
 
 
 @subscriber(IDataExtractedEvent, form_selector=DataTypeAddForm)
@@ -273,16 +273,8 @@
         event.form.widgets.errors += (Invalid(_("Specified type name is already used!")),)
 
 
-@view_config(name='add-data-type.json', context=ITypedSharedTool, request_type=IPyAMSLayer,
-             permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
-class DataTypeAJAXAddForm(AJAXAddForm, DataTypeAddForm):
-    """Data type add form, JSON renderer"""
-
-    def nextURL(self):
-        return '#data-types.html'
-
-
 @pagelet_config(name='properties.html', context=IDataType, layer=IPyAMSLayer, permission=MANAGE_TOOL_PERMISSION)
+@ajax_config(name='properties.json', context=IDataType, layer=IPyAMSLayer)
 class DataTypeEditForm(AdminDialogEditForm):
     """Data type edit form"""
 
@@ -295,7 +287,6 @@
 
     fields = field.Fields(IDataType).omit('__parent__', '__name__')
 
-    ajax_handler = 'properties.json'
     edit_permission = MANAGE_TOOL_PERMISSION
 
     def updateWidgets(self, prefix=None):
@@ -304,12 +295,6 @@
             self.widgets['name'].mode = DISPLAY_MODE
 
 
-@view_config(name='properties.json', context=IDataType, request_type=IPyAMSLayer,
-             permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
-class DataTypeAJAXEditForm(AJAXEditForm, DataTypeEditForm):
-    """Data type edit form, JSON renderer"""
-
-
 #
 # Subtypes views
 #
@@ -460,6 +445,7 @@
 
 @pagelet_config(name='add-data-subtype.html', context=IDataType, layer=IPyAMSLayer,
                 permission=MANAGE_TOOL_PERMISSION)
+@ajax_config(name='add-data-subtype.json', context=IDataType, layer=IPyAMSLayer, base=AJAXAddForm)
 class DataSubtypeAddForm(AdminDialogAddForm):
     """Data subtype add form"""
 
@@ -470,7 +456,6 @@
 
     fields = field.Fields(ISubType).omit('__parent__', '__name__')
 
-    ajax_handler = 'add-data-subtype.json'
     edit_permission = MANAGE_TOOL_PERMISSION
 
     def create(self, data):
@@ -483,6 +468,15 @@
     def nextURL(self):
         return absolute_url(self.context, self.request, 'admin#data-types.html')
 
+    def get_ajax_output(self, changes):
+        return {
+            'status': 'success',
+            'message': self.request.localizer.translate(_("Subtype was correctly added.")),
+            'events': [
+                get_json_table_refresh_event(self.context, self.request, DatatypeSubtypesTable)
+            ]
+        }
+
 
 @subscriber(IDataExtractedEvent, form_selector=DataSubtypeAddForm)
 def handle_subtype_add_form_data_extraction(event):
@@ -494,22 +488,8 @@
         event.form.widgets.errors += (Invalid(_("Specified subtype name is already used!")),)
 
 
-@view_config(name='add-data-subtype.json', context=IDataType, request_type=IPyAMSLayer,
-             permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
-class DataSubtypeAJAXAddForm(AJAXAddForm, DataSubtypeAddForm):
-    """Data subtype add form, JSON renderer"""
-
-    def get_ajax_output(self, changes):
-        return {
-            'status': 'success',
-            'message': self.request.localizer.translate(_("Subtype was correctly added.")),
-            'events': [
-                get_json_table_refresh_event(self.context, self.request, DatatypeSubtypesTable)
-            ]
-        }
-
-
 @pagelet_config(name='properties.html', context=ISubType, layer=IPyAMSLayer, permission=MANAGE_TOOL_PERMISSION)
+@ajax_config(name='properties.json', context=ISubType, layer=IPyAMSLayer)
 class DataSubtypeEditForm(AdminDialogEditForm):
     """Data subtype edit form"""
 
@@ -522,7 +502,6 @@
 
     fields = field.Fields(ISubType).omit('__parent__', '__name__')
 
-    ajax_handler = 'properties.json'
     edit_permission = MANAGE_TOOL_PERMISSION
 
     def updateWidgets(self, prefix=None):
@@ -530,12 +509,6 @@
         if 'name' in self.widgets:
             self.widgets['name'].mode = DISPLAY_MODE
 
-
-@view_config(name='properties.json', context=ISubType, request_type=IPyAMSLayer,
-             permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
-class DataSubtypeAJAXEditForm(AJAXEditForm, DataSubtypeEditForm):
-    """Data subtype edit form, JSON renderer"""
-
     def get_ajax_output(self, changes):
         if 'label' in changes.get(IBaseDataType, ()):
             target = get_parent(self.context, IDataType)
@@ -547,4 +520,4 @@
                 ]
             }
         else:
-            return super(DataSubtypeAJAXEditForm, self).get_ajax_output(changes)
+            return super(self.__class__, self).get_ajax_output(changes)