--- 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)