src/pyams_content/shared/form/zmi/field.py
changeset 527 5dd1aa8bedd9
parent 501 3407e6940f6a
child 591 b694d5667d17
--- a/src/pyams_content/shared/form/zmi/field.py	Wed Apr 11 16:44:46 2018 +0200
+++ b/src/pyams_content/shared/form/zmi/field.py	Wed Apr 11 16:46:31 2018 +0200
@@ -38,7 +38,9 @@
 from pyams_form.form import AJAXAddForm, AJAXEditForm
 from pyams_form.security import ProtectedFormObjectMixin
 from pyams_pagelet.pagelet import pagelet_config
-from pyams_skin.table import BaseTable, SorterColumn, JsActionColumn, I18nColumn, TrashColumn, I18nValueColumn
+from pyams_skin.container import switch_element_visibility
+from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, I18nValueColumn, \
+    VisibilitySwitcherColumn
 from pyams_skin.viewlet.menu import MenuItem
 from pyams_skin.viewlet.toolbar import ToolbarAction
 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
@@ -50,7 +52,6 @@
 from pyams_zmi.view import ContainerAdminView
 from pyramid.decorator import reify
 from pyramid.events import subscriber
-from pyramid.exceptions import NotFound
 from pyramid.view import view_config
 from z3c.form import field
 from z3c.table.column import GetAttrColumn
@@ -76,7 +77,8 @@
 class FormFieldsContainerTable(ProtectedFormObjectMixin, BaseTable):
     """Form fields table"""
 
-    id = 'form_fields_list'
+    prefix = 'form_fields'
+
     hide_header = True
     sortOn = None
 
@@ -91,13 +93,15 @@
     @property
     def data_attributes(self):
         attributes = super(FormFieldsContainerTable, 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(IFormFieldContainer(self.context), self.request),
-                               'data-ams-tablednd-drag-handle': 'td.sorter',
-                               'data-ams-tablednd-drop-target': 'set-form-fields-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(IFormFieldContainer(self.context), self.request),
+            'data-ams-tablednd-drag-handle': 'td.sorter',
+            'data-ams-tablednd-drop-target': 'set-form-fields-order.json',
+            'data-ams-visibility-switcher': 'switch-form-field-visibility.json'
+        }
         return attributes
 
     @reify
@@ -119,31 +123,15 @@
 
 @adapter_config(name='show-hide', context=(IFormFieldContainerTarget, IPyAMSLayer, FormFieldsContainerTable),
                 provides=IColumn)
-class FormFieldsContainerShowHideColumn(ProtectedFormObjectMixin, JsActionColumn):
+class FormFieldsContainerShowHideColumn(ProtectedFormObjectMixin, VisibilitySwitcherColumn):
     """Form fields container visibility switcher column"""
 
-    cssClasses = {'th': 'action',
-                  'td': 'action switcher'}
 
-    icon_class = 'fa fa-fw fa-eye'
-    icon_hint = _("Switch field visibility")
-
-    url = 'PyAMS_content.fields.switchVisibility'
-
-    weight = 5
-
-    def get_icon(self, item):
-        if item.visible:
-            icon_class = 'fa fa-fw fa-eye'
-        else:
-            icon_class = 'fa fa-fw fa-eye-slash text-danger'
-        return '<i class="{icon_class}"></i>'.format(icon_class=icon_class)
-
-    def renderCell(self, item):
-        if self.permission and not self.request.has_permission(self.permission, context=item):
-            return self.get_icon(item)
-        else:
-            return super(FormFieldsContainerShowHideColumn, self).renderCell(item)
+@view_config(name='switch-form-field-visibility.json', context=IFormFieldContainer, request_type=IPyAMSLayer,
+             permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
+def switch_form_field_visibility(request):
+    """Set form field visibility"""
+    return switch_element_visibility(request, IFormFieldContainer)
 
 
 @adapter_config(context=FormFieldsContainerShowHideColumn, provides=IFormSecurityContext)
@@ -225,19 +213,6 @@
     return {'status': 'success'}
 
 
-@view_config(name='set-form-field-visibility.json', context=IFormFieldContainer, request_type=IPyAMSLayer,
-             permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
-def set_form_field_visibility(request):
-    """Set form field visibility"""
-    container = IFormFieldContainer(request.context)
-    paragraph = container.get(str(request.params.get('object_name')))
-    if paragraph is None:
-        raise NotFound()
-    field = IFormField(paragraph)
-    field.visible = not field.visible
-    return {'visible': field.visible}
-
-
 #
 # Form field views
 #
@@ -300,6 +275,8 @@
 class FormFieldPropertiesEditForm(AdminDialogEditForm):
     """Form field properties edit form"""
 
+    prefix = 'field_properties.'
+
     @property
     def title(self):
         content = get_parent(self.context, IWfSharedContent)