src/pyams_content/shared/common/zmi/types.py
changeset 527 5dd1aa8bedd9
parent 375 292bbdf6bf40
child 591 b694d5667d17
--- a/src/pyams_content/shared/common/zmi/types.py	Wed Apr 11 16:44:46 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/types.py	Wed Apr 11 16:46:31 2018 +0200
@@ -36,6 +36,8 @@
 from pyams_form.form import AJAXAddForm, AJAXEditForm
 from pyams_form.security import ProtectedFormObjectMixin
 from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.container import delete_container_element
+from pyams_skin.event import get_json_table_refresh_event
 from pyams_skin.table import BaseTable, SorterColumn, TrashColumn, NameColumn, ActionColumn
 from pyams_skin.viewlet.menu import MenuItem
 from pyams_skin.viewlet.toolbar import ToolbarAction
@@ -74,7 +76,8 @@
 class TypedSharedToolTypesTable(ProtectedFormObjectMixin, BaseTable):
     """Typed shared tool types table"""
 
-    id = 'types_list'
+    prefix = 'types'
+
     hide_header = True
     sortOn = None
 
@@ -89,13 +92,14 @@
     @property
     def data_attributes(self):
         attributes = super(TypedSharedToolTypesTable, self).data_attributes
-        attributes['table'] = {'id': self.id,
-                               'data-ams-plugins': 'pyams_content',
-                               'data-ams-plugin-pyams_content-src':
-                                   get_resource_path(pyams_content),
-                               'data-ams-location': absolute_url(ITypedDataManager(self.context), self.request),
-                               'data-ams-tablednd-drag-handle': 'td.sorter',
-                               'data-ams-tablednd-drop-target': 'set-types-order.json'}
+        attributes['table'] = {
+            'id': self.id,
+            'data-ams-plugins': 'pyams_content',
+            'data-ams-plugin-pyams_content-src': get_resource_path(pyams_content),
+            'data-ams-location': absolute_url(ITypedDataManager(self.context), self.request),
+            'data-ams-tablednd-drag-handle': 'td.sorter',
+            'data-ams-tablednd-drop-target': 'set-types-order.json'
+        }
         return attributes
 
     @reify
@@ -124,6 +128,15 @@
     """Typed shared tool types sorter column"""
 
 
+@view_config(name='set-types-order.json', context=ITypedDataManager, request_type=IPyAMSLayer,
+             permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
+def set_data_types_order(request):
+    """Update data types order"""
+    order = list(map(str, json.loads(request.params.get('names'))))
+    request.context.updateOrder(order)
+    return {'status': 'success'}
+
+
 @adapter_config(name='name', context=(ITypedSharedTool, IPyAMSLayer, TypedSharedToolTypesTable),
                 provides=IColumn)
 class TypedSharedToolTypesNameColumn(NameColumn):
@@ -183,6 +196,13 @@
     permission = MANAGE_TOOL_PERMISSION
 
 
+@view_config(name='delete-element.json', context=ITypedDataManager, request_type=IPyAMSLayer,
+             permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
+def delete_data_type(request):
+    """Data type delete view"""
+    return delete_container_element(request, ignore_permission=True)
+
+
 @pagelet_config(name='data-types.html', context=ITypedSharedTool, layer=IPyAMSLayer,
                 permission=MANAGE_TOOL_PERMISSION)
 class TypedSharedToolTypesView(ContainerAdminView):
@@ -193,37 +213,6 @@
 
 
 #
-# Typed shared data types manager views
-#
-
-@view_config(name='delete-element.json', context=ITypedDataManager, request_type=IPyAMSLayer,
-             permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
-def delete_data_type(request):
-    """Data type delete view"""
-    translate = request.localizer.translate
-    name = request.params.get('object_name')
-    if not name:
-        return {'status': 'message',
-                'messagebox': {'status': 'error',
-                               'content': translate(_("No provided object_name argument!"))}}
-    if name not in request.context:
-        return {'status': 'message',
-                'messagebox': {'status': 'error',
-                               'content': translate(_("Given data type doesn't exist!"))}}
-    del request.context[name]
-    return {'status': 'success'}
-
-
-@view_config(name='set-types-order.json', context=ITypedDataManager, request_type=IPyAMSLayer,
-             permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
-def set_data_types_order(request):
-    """Update data types order"""
-    order = list(map(str, json.loads(request.params.get('names'))))
-    request.context.updateOrder(order)
-    return {'status': 'success'}
-
-
-#
 # Data type views
 #
 
@@ -297,6 +286,8 @@
 class DataTypeEditForm(AdminDialogEditForm):
     """Data type edit form"""
 
+    prefix = 'datatype_properties.'
+
     legend = _("Data type properties")
     icon_css_class = 'fa fa-fw fa-folder-o'
     label_css_class = 'control-label col-md-4'
@@ -326,9 +317,7 @@
 class DatatypeSubtypesTable(BaseTable):
     """Data type subtypes table"""
 
-    @property
-    def id(self):
-        return 'subtypes_{0}_list'.format(self.context.__name__)
+    prefix = 'subtypes'
 
     hide_header = True
     sortOn = None
@@ -339,14 +328,15 @@
     @property
     def data_attributes(self):
         attributes = super(DatatypeSubtypesTable, self).data_attributes
-        attributes['table'] = {'id': self.id,
-                               'data-ams-plugins': 'pyams_content',
-                               'data-ams-plugin-pyams_content-src':
-                                   get_resource_path(pyams_content),
-                               'data-ams-location': absolute_url(self.context, self.request),
-                               'data-ams-tablednd-drag-handle': 'td.sorter',
-                               'data-ams-tablednd-drop-target': 'set-subtypes-order.json'}
-        attributes.setdefault('tr', {}).setdefault('data-ams-stop-propagation', 'true')
+        attributes['table'] = {
+            'id': self.id,
+            'data-ams-plugins': 'pyams_content',
+            'data-ams-plugin-pyams_content-src': get_resource_path(pyams_content),
+            'data-ams-location': absolute_url(self.context, self.request),
+            'data-ams-tablednd-drag-handle': 'td.sorter',
+            'data-ams-tablednd-drop-target': 'set-subtypes-order.json'
+        }
+        attributes.setdefault('tr', {}).update({'data-ams-stop-propagation': 'true'})
         return attributes
 
     @reify
@@ -368,6 +358,15 @@
     """Data type subtypes table sorter column"""
 
 
+@view_config(name='set-subtypes-order.json', context=IDataType, request_type=IPyAMSLayer,
+             permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
+def set_subtypes_order(request):
+    """Update subtypes order"""
+    order = list(map(str, json.loads(request.params.get('names'))))
+    request.context.updateOrder(order)
+    return {'status': 'success'}
+
+
 @adapter_config(name='name', context=(IDataType, IPyAMSLayer, DatatypeSubtypesTable), provides=IColumn)
 class DatatypeSubtypesTableNameColumn(NameColumn):
     """Data type subtypes table name column"""
@@ -424,6 +423,13 @@
     permission = MANAGE_TOOL_PERMISSION
 
 
+@view_config(name='delete-element.json', context=IDataType, request_type=IPyAMSLayer,
+             permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
+def delete_subtype(request):
+    """Data subtype delete view"""
+    return delete_container_element(request, ignore_permission=True)
+
+
 @view_config(name='get-subtypes-table.json', context=ITypedDataManager, request_type=IPyAMSLayer,
              permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
 def get_subtypes_table(request):
@@ -436,38 +442,10 @@
     return table.render()
 
 
-@view_config(name='set-subtypes-order.json', context=IDataType, request_type=IPyAMSLayer,
-             permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
-def set_subtypes_order(request):
-    """Update subtypes order"""
-    order = list(map(str, json.loads(request.params.get('names'))))
-    request.context.updateOrder(order)
-    return {'status': 'success'}
-
-
-@view_config(name='delete-element.json', context=IDataType, request_type=IPyAMSLayer,
-             permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
-def delete_subtype(request):
-    """Data subtype delete view"""
-    translate = request.localizer.translate
-    name = request.params.get('object_name')
-    if not name:
-        return {'status': 'message',
-                'messagebox': {'status': 'error',
-                               'content': translate(_("No provided object_name argument!"))}}
-    if name not in request.context:
-        return {'status': 'message',
-                'messagebox': {'status': 'error',
-                               'content': translate(_("Given data subtype doesn't exist!"))}}
-    del request.context[name]
-    return {'status': 'success'}
-
-
 #
 # Data sub-types views
 #
 
-
 @viewlet_config(name='add-data-subtype.action', context=IDataType, layer=IPyAMSLayer,
                 view=DatatypeSubtypesTable, manager=IWidgetTitleViewletManager,
                 permission=MANAGE_TOOL_PERMISSION, weight=1)
@@ -522,19 +500,12 @@
     """Data subtype add form, JSON renderer"""
 
     def get_ajax_output(self, changes):
-        subtypes_table = DatatypeSubtypesTable(self.context, self.request)
-        subtypes_table.update()
         return {
             'status': 'success',
             'message': self.request.localizer.translate(_("Subtype was correctly added.")),
-            'events': [{
-                'event': 'myams.refresh',
-                'options': {
-                    'handler': 'MyAMS.skin.refreshTable',
-                    'object_id': subtypes_table.id,
-                    'table': subtypes_table.render()
-                }
-            }]
+            'events': [
+                get_json_table_refresh_event(self.context, self.request, DatatypeSubtypesTable)
+            ]
         }
 
 
@@ -542,6 +513,8 @@
 class DataSubtypeEditForm(AdminDialogEditForm):
     """Data subtype edit form"""
 
+    prefix = 'subtype_properties.'
+
     legend = _("Data subtype properties")
     icon_css_class = 'fa fa-fw fa-folder-o'
     label_css_class = 'control-label col-md-4'
@@ -566,19 +539,12 @@
     def get_ajax_output(self, changes):
         if 'label' in changes.get(IBaseDataType, ()):
             target = get_parent(self.context, IDataType)
-            subtypes_table = DatatypeSubtypesTable(target, self.request)
-            subtypes_table.update()
             return {
                 'status': 'success',
                 'message': self.request.localizer.translate(self.successMessage),
-                'events': [{
-                    'event': 'myams.refresh',
-                    'options': {
-                        'handler': 'MyAMS.skin.refreshTable',
-                        'object_id': subtypes_table.id,
-                        'table': subtypes_table.render()
-                    }
-                }]
+                'events': [
+                    get_json_table_refresh_event(target, self.request, DatatypeSubtypesTable)
+                ]
             }
         else:
             return super(DataSubtypeAJAXEditForm, self).get_ajax_output(changes)